home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / demo / system / main_v3.82.s < prev   
Text File  |  1997-01-31  |  103KB  |  4,023 lines

  1.         section    Main,code
  2.         jmp    main_startup
  3.  
  4. ;settings
  5. ;main_programname:    MACRO    ; Sets program name (Window..)
  6. ;                dc.b    'Program name'
  7. ;            ENDM
  8. ;            
  9. ;main_sysinfooff    ; Don't show sysinfo
  10. ;main_reqinfooff    ; Don't show requirements
  11. ;main_endinfooff    ; Don't show end info
  12. ;main_debugoff        ; disables debugger
  13. ;
  14. ;main_introcode:    MACRO    ; Code to run after system startup
  15. ;main_endcode:        MACRO    ; Code to run before system closedown
  16. ;
  17. ;main_skipsysinfo    ; Skip system test
  18. ;main_cacheoff        ; Disables caches (If existing)
  19. ;main_dostextoff    ; Disables ALL dos output (Text)
  20. ;main_systemon        ; Leaves system on no system disable
  21. ;main_vectortrap    =    %<Vectors to trap>      <Default bits>
  22. ;    Vector bits:    9    =    Bus error        1
  23. ;            8    =    Address error        1
  24. ;            7    =    Illegal command        1
  25. ;            6    =    Division by zero    1
  26. ;            5    =    CHK command        1
  27. ;            4    =    TRAPV command        0
  28. ;            3    =    Privilege violation    0
  29. ;            2    =    Trace            0
  30. ;            1    =    Axxx command emulation    1
  31. ;            0    =    Fxxx command emulation    1
  32. ;main_trap7        ; Use level 7 to exit
  33. ;main_reqproc        =    2    ; Requiered processor 1=010 or greater
  34. ;main_reqfpu                ; Set to require FPU
  35. ;main_reqmmu                ; Set to require Extended Chip Set
  36. ;main_reqaga                ; Set to require AGA chipset
  37. ;main_reqecs                ; Set to require Extended Chip Set
  38. ;main_reqpal                ; Set to require PAL video mode
  39. ;main_reqntsc                ; Set to require NTSC video mode
  40. ;main_reqfast    =    4096        ; How many KB Fast RAM that is needed
  41. ;main_reqchip    =    2048        ; How many KB Chip RAM that is needed
  42. ;
  43. ;main_rgbfadeto        =    $0RGB    ; Fade to colour at start (12 bit)
  44. ;main_rgbfadefrom    =    $0RGB    ; Fade from colour at end (12 bit)
  45. ;main_faderoff        ; Disable colour fade (At start and End)
  46. ;main_noexit        ; Disable exit function until end
  47. ;main_usermb        ; Call Debug with RMB
  48. ;main_uselmb        ; Call debug with Left mouse button
  49. ;main_length        =    xxxx    ; max run time.
  50. ;main_disableint        ; Disable all interrupt stuff
  51. ;main_short        ; Shortest startup
  52. ;main_meteroff        ; Disables meter code (Saving memory)
  53. ;main_meteron        ; Enables the frame meter
  54. ;main_playeroff        ; Player off
  55. ;main_disabledos    ; Disables DOS routines (Load,Execute)
  56. ;main_loader        ; Use this switch when load proggy
  57.  
  58. ********************************************************** Replayer settings **
  59.  
  60.         IFND    main_loader
  61.         IFND    main_playeroff
  62.         IFND    main_ownplayer
  63.  
  64. main_musicinit:    MACRO        ; Command to start module (A0=Mod ptr)
  65.         bsr    PPR_Init
  66.         ENDM
  67.  
  68. main_musicplay:    MACRO        ; Command to run every frame (CIA=None)
  69.         move.w    #$8200,$dff096
  70.         bsr    PPR_Music
  71.         ENDM
  72.  
  73. main_musicstop:    MACRO        ; Command to Stop Music
  74.         bsr    PPR_End
  75.         ENDM
  76.  
  77. PPR_68020    =    1
  78. PPR_NotePlayer    =    0
  79.  
  80.         include    "demo:System/ProRunner.S"
  81.         ENDIF
  82.         ENDIF
  83.         ENDIF
  84. *******************************************************************************
  85.  
  86. ;------------------------------------------------------------------ Defaults --
  87. ;----------------------------------------------- Main short --
  88.     IFD    main_short
  89.     IFND    main_sysinfooff    ; Don't show sysinfo
  90. main_sysinfooff    ; Don't show sysinfo
  91.     ENDIF
  92.     IFND    main_disabledos    ; Don't use dos functions
  93. main_disabledos    ; Don't use dos functions
  94.     ENDIF
  95.     IFND    main_meteroff    ; Don't use meter
  96. main_meteroff    ; Don't use meter
  97.     ENDIF
  98.     IFND    main_reqinfooff    ; Don't show requirements
  99. main_reqinfooff    ; Don't show requirements
  100.     ENDIF
  101.     IFND    main_endinfooff    ; Don't show end info
  102. main_endinfooff    ; Don't show end info
  103.     ENDIF
  104.     IFND    main_debugoff    ; disables debugger
  105. main_debugoff    ; disables debugger
  106.     ENDIF
  107.     IFND    main_dostextoff    ; Disables ALL dos output (Text)
  108. main_dostextoff    ; Disables ALL dos output (Text)
  109.     ENDIF
  110.     IFND    main_disableint    ; Disable all interrupt stuff
  111. main_disableint    ; Disable all interrupt stuff
  112.     ENDIF
  113.     IFND    main_playeroff    ; Player off
  114. main_playeroff    ; Player off
  115.     ENDIF
  116.     IFND    main_faderoff    ; Player off
  117. main_faderoff    ; fader off
  118.     ENDIF
  119.     IFND    main_skipsysinfo    ; Skip system test
  120. main_skipsysinfo    ; Skip system test
  121.     ENDIF
  122.     ENDIF
  123. ;------------------------------------------- main_uselmb --
  124.     IFND    main_uselmb
  125. main_usermb
  126.     ENDIF
  127.  
  128. ;------------------------------------------- main_vectortrap --
  129.     IFND    main_vectortrap
  130. main_vectortrap        =    %1111100011
  131.     ENDIF
  132.  
  133. ;------------------------------------------ main_dostextoff --
  134.  
  135.     IFD    main_dostextoff    ; Disables ALL dos output (Text)
  136.     IFND    main_sysinfooff    ; Don't show sysinfo
  137. main_sysinfooff    ; Don't show sysinfo
  138.     ENDIF
  139.     IFND    main_reqinfooff    ; Don't show requirements
  140. main_reqinfooff    ; Don't show requirements
  141.     ENDIF
  142.     IFND    main_endinfooff    ; Don't show end info
  143. main_endinfooff    ; Don't show end info
  144.     ENDIF
  145.  
  146.  
  147.     ENDIF
  148. ;----------------------------------------------------------- main_textvaron --
  149.     IFND    main_debugoff
  150. main_textvaron
  151.     ENDIF
  152.  
  153.     IFD    main_debugoff
  154.     IFND    main_dostextoff
  155. main_textvaron
  156.     ENDIF
  157.     ENDIF
  158. ;-------------------------------------------------------- main_skipsysinfo --
  159.     IFD    main_skipsysinfo
  160.     IFND    main_sysinfooff    ; Don't show sysinfo
  161. main_sysinfooff    ; Don't show sysinfo
  162.     ENDIF
  163.     IFND    main_reqinfooff    ; Don't show requirements
  164. main_reqinfooff    ; Don't show requirements
  165.     ENDIF
  166.     ENDIF
  167.  
  168.     IFD    main_debugoff
  169.     IFND    main_meteroff
  170. main_meteroff
  171.     ENDIF
  172.     ENDIF
  173.     
  174.  
  175.  
  176. ********************************************************************* Macros **
  177.  
  178. macro_sync:    MACRO    ; Kills: d7 --            Macro_Sync
  179.     IFND    main_meteroff
  180.         movem.l    d0-a0,-(a7)
  181.         move.l    main_dataptr,a0
  182.         move.l    44(a0),a0
  183.         jsr    (a0)
  184.         move.l    main_dataptr,a0
  185.         move.l    d0,48(a0)
  186.     ENDIF
  187. .waitsync\@:    move.l    $dff004,d7
  188.         and.l    #$1ff00,d7
  189.         cmp.l    #305*$100,d7
  190.         bne.s    .waitsync\@
  191.     IFND    main_meteroff
  192.         move.l    main_dataptr,a0
  193.         move.l    40(a0),a0
  194.         jsr    (a0)
  195.         movem.l    (a7)+,d0-a0
  196.     ENDIF
  197.     ENDM
  198.  
  199. macro_waitvbl:    MACRO    ; Kills: d7 --            Macro_WaitVbl
  200. .waitsync1\@:    move.l    $dff004,d7
  201.         and.l    #$1ff00,d7
  202.         cmp.l    #305*$100,d7
  203.         bne.s    .waitsync1\@
  204. .waitsync2\@:    move.l    $dff004,d7
  205.         and.l    #$1ff00,d7
  206.         cmp.l    #305*$100,d7
  207.         beq.s    .waitsync2\@
  208.     ENDM
  209.  
  210. ************************************************************** START OF CODE **
  211.  
  212.     IFND    main_loader
  213. main_startup:    
  214.         IFND    main_short
  215.         IFD    main_fakearg
  216.         lea    .fakearg,a0
  217.         move.l    a0,a1
  218.         moveq.l    #0,d0
  219. .countloop:    addq.l    #1,d0        
  220.         tst.b    (a1)+
  221.         bne.s    .countloop
  222.         bra.s    .okletsgo
  223. .fakearg:    main_fakearg
  224.         dc.b    0
  225.         even
  226. .okletsgo:
  227.         ENDIF
  228.         ENDIF
  229.         bra.w    main_sysinit
  230. main_sysstartupok:;--------------------------------------- System startup ok --
  231.     IFD    main_introcode
  232.         main_introcode
  233.     ENDIF
  234.     IFND    main_skipsysinfo
  235.         bsr.w    main_showsysinfo
  236.         bsr.w    main_checkreq
  237.         tst.w    main_ok2run
  238.         bne.s    main_skipprog
  239.     ENDIF
  240.     IFND    main_systemon
  241.     IFND    main_disableint
  242.     IFD    main_length
  243.         move.l    #main_length,main_timer
  244.     ENDIF
  245.     ENDIF
  246.         bsr.w    main_disablesystem
  247.     ENDIF
  248.         move.l    a7,main_oldsp
  249.     IFD    main_meteron
  250.         bsr.w    main_framemeteron
  251.     ENDIF
  252.         jsr    main_start
  253.     IFND    main_systemon
  254.         move.l    main_dataptr,a0
  255.         move.w    #13,56(a0)    ; main_trappedvector
  256.     ENDIF
  257.         jmp    main_cont
  258. main_exit:    
  259.     IFND    main_systemon
  260.         move.l    main_dataptr,a0
  261.         move.w    #0,56(a0)    ; main_trappedvector
  262.     ENDIF
  263. main_cont:        move.l    main_oldsp,a7
  264.     IFD    main_meteron
  265.         bsr.w    main_framemeteroff
  266.     ENDIF
  267.     IFND    main_systemon
  268.         bsr.w    main_restoresystem
  269.     ENDIF
  270. *--------------------------------------------------------- Close down system --
  271. main_skipprog:
  272.     IFND    main_systemon
  273.     IFND    main_endinfooff
  274.     IFND    main_skipsysinfo
  275.         bsr.w    main_exitmsg
  276.     ENDIF
  277.     ENDIF
  278.     ENDIF
  279.     IFD    main_endcode
  280.         main_endcode
  281.     ENDIF
  282. main_dealloc:
  283.     IFND    main_systemon
  284.     IFND    main_debugoff
  285.         move.l    $4,a6            ; Exec base address
  286.         move.l    main_configscr,d0    ; Get address
  287.         beq.s    .nodealloc        ; Nothing allocated
  288.         move.l    d0,a1            ; Address ptr
  289.         move.l    #20480+4096,d0        ; Dealloc 1 bpl
  290.         jsr    -210(a6)        ; Exec FreeMem
  291. .nodealloc:
  292.         move.l    kbd_macroptr,d0
  293.         beq.s    .nodealloc2
  294.         move.l    d0,a1
  295.         move.l    #16384,d0
  296.         jsr    -210(a6)        ; Exec FreeMem
  297. .nodealloc2:
  298.     ENDIF
  299.     ENDIF        
  300. main_closedos:    tst.b    main_conuse        ; Was console window openend?
  301.         beq.s    .noconsoleopen        ; Not.
  302.         move.l    main_dataptr,a6
  303.         move.l    64(a6),d1    ; main_conhandler,d1    ; Get ConHandler
  304.         move.l    60(a6),a6    ; main_doshandler,a6 Get DosHandler
  305.         jsr    -36(a6)            ; Dos close file
  306. .noconsoleopen:    move.l    $4,a6            ; Exec lib handler
  307.         move.l    main_dataptr,a1
  308.         move.l    60(a1),a1    ; main_doshandler,a1 Get dos handler
  309.         jsr    -414(a6)        ; Exec close lib
  310. main_nodoslib:    rts
  311.     ENDIF
  312.  
  313. *********************************************************** MAIN_LOADER CODE **
  314.     IFD    main_loader
  315.     
  316. main_startup:    move.l    a7,main_oldsp
  317.         bsr.w    dos_readaddy
  318.         move.l    d0,a0
  319.         bsr.w    main_setnewdata
  320.         cmp.l    #'TBL.',main_idcode
  321.         bne.w    main_noloader
  322.         move.l    $4.w,a6            ; Exec base
  323.         tst.b    297(a6)            ; Test processor flags
  324.         beq.s    .novbr            ; No vbr = 68000
  325.         lea    main_getvbr,a5        ; Ptr to supervisor routine
  326.         jsr    -30(a6)            ; Supervisor
  327. .novbr:        lea    $dff000,a6
  328.         move.w    #$0040,$9a(a6)        ; Disable blitter intena
  329. .w8blt:        btst    #6,$02(a6)
  330.         bne.s    .w8blt
  331.         move.w    #$0040,$96(a6)
  332. .w8:        move.l    $04(a6),d0
  333.         and.l    #$1ff00,d0
  334.         cmp.l    #$100*305,d0
  335.         bne.s    .w8
  336.         move.w    #$7de0,$96(a6)
  337.         move.l    main_exitaddy,main_oldexit    ; Save old exit
  338.         move.l    #main_exit,main_exitaddy
  339.         clr.w    main_lock
  340.         clr.l    main_returnvalue
  341.         jsr    main_start
  342.         move.l    #'OK!!',main_returnvalue
  343.         bra.s    main_doit
  344. main_exit:    st.b    main_lock
  345.         move.l    #'EXIT',main_returnvalue
  346. main_doit:    st.b    main_lock
  347.         move.l    main_oldexit,main_exitaddy    ; Restore old exit
  348.         move.l    main_oldsp,a7
  349.         lea    $dff000,a6
  350.         clr.l    main_vblint
  351.         clr.l    main_vblint2
  352.         move.w    #$0040,$9a(a6)        ; Disable blitter intena
  353. .w8blt:        btst.b    #6,$02(a6)        
  354.         bne.s    .w8blt
  355.         move.w    #$0040,$96(a6)        ; Disable BLT DMA
  356. .w8:        move.l    $04(a6),d0
  357.         and.l    #$1ff00,d0
  358.         cmp.l    #$100*305,d0
  359.         bne.s    .w8
  360.         move.w    #$7de0,$96(a6)
  361. ;        move.w    #$0040,$9c(a6)
  362.         move.w    #$8200!%1000000,$96(a6)        ; Enable blitter DMA
  363.         clr.l    main_bltint
  364.         move.w    #$8008,$9a(a6)            ; Enable timers and ports
  365.         bsr.w    main_restoredata
  366. main_noloader:    
  367.         moveq.l    #0,d0
  368.         rts
  369.  
  370. main_setnewdata:;in:    a0=Ptr to dosinfo block ptr
  371.         move.l    a0,main_olddataptr
  372.         move.l    (a0),a2            ; a0=Start of data block
  373.         move.l    a2,main_oldinfo
  374.         lea    $dff000,a6
  375. .w8:        move.l    $04(a6),d0
  376.         and.l    #$1ff00,d0
  377.         cmp.l    #$100*280,d0
  378.         bne.s    .w8
  379.         subq.l    #8,a2
  380.         lea    main_datablockstart,a1
  381.         move.w    #(main_datablockend-main_datablockstart)/4-1,d0
  382. .loop:        move.l    (a2)+,(a1)+
  383.         dbra    d0,.loop        
  384.         move.l    #main_infoblock,(a0)    ; Set new data ptr
  385.         rts
  386.  
  387. main_restoredata:
  388.         move.l    main_olddataptr,a0
  389.         move.l    main_oldinfo,a2
  390.         lea    $dff000,a6
  391. .w8:        move.l    $04(a6),d0
  392.         and.l    #$1ff00,d0
  393.         cmp.l    #$100*280,d0
  394.         bne.s    .w8
  395.         move.l    a2,a3
  396.         subq.l    #8,a2
  397.         lea    main_datablockstart,a1
  398.         move.w    #(main_datablockend-main_datablockstart)/4-1,d0
  399. .loop:        move.l    (a1)+,(a2)+
  400.         dbra    d0,.loop        
  401.         move.l    a3,(a0)    ; Set new data ptr
  402.         rts
  403.  
  404. main_oldinfo:    dc.l    0
  405. main_oldexit:    dc.l    0
  406.  
  407. main_olddataptr:dc.l    0            ; Old data ptr
  408.  
  409.     ENDIF
  410.     
  411. ************************************************ Main_Loader & Main Code+DATA **
  412.  
  413.  
  414. main_getvbr:    dc.l    $4e7a0801    ;movec vbr,d0
  415.         move.l    d0,main_vbrbase
  416.         rte
  417.  
  418.     IFND    main_systemon
  419.  
  420.     IFND    main_disabledos
  421.  
  422. *************************************************************************
  423. * Non OS loading and executing routines                 *
  424. *************************************************************************
  425.  
  426. dos_load:    ;in:    a0=Ptr to file name,a1=Ptr to address
  427.         ;    d0=Length
  428.         clr.w    dos_error
  429.         st.b    main_lock
  430.         move.l    d0,.savel
  431.         move.w    #$8200!%1000000,$dff096    ; Enable blitter DMA
  432.         move.w    #$8008,$dff09a        ; Enable Ports Interrupt
  433.         move.l    main_doshandler,a6
  434.         move.l    #1005,d2
  435.         move.l    a1,.oldd1
  436.         move.l    a0,d1        
  437.         jsr    -30(a6)            ; Open file
  438.         tst.l    d0
  439.         beq.s    .error
  440.         move.l    .oldd1,d2
  441.         move.l    d0,.oldd1
  442.         move.l    d0,d1
  443.         move.l    .savel,d3
  444.         jsr    -42(a6)            ; Read
  445.         tst.l    d0
  446.         beq.s    .error
  447.         move.l    .oldd1,d1
  448.         jsr    -36(a6)
  449.         lea    $dff000,a6
  450.         tst.b    $02(a6)
  451. .wblit:        btst    #6,$02(a6)
  452.         bne.s    .wblit
  453. .w8:        move.l    $04(a6),d0
  454.         and.l    #$1ff00,d0
  455.         cmp.l    #$100*307,d0
  456.         bne.s    .w8
  457.         move.w    #%1000000,$96(a6)
  458.         move.w    #$0008,$9a(a6)
  459.         clr.w    main_lock
  460.         rts
  461. .oldd1:        dc.l    0
  462. .savel:        dc.l    0        
  463. .error:        st.b    dos_error
  464.         move.w    #15,main_trappedvector
  465.         move.l    dos_exitaddy,a0
  466.         clr.w     main_lock
  467.         jmp    (a0)
  468.  
  469. dos_execute:    ;in:    a0=Ptr to filename
  470.         clr.w    dos_error
  471.         st.b    main_lock
  472.         move.w    #$0040,$dff09c        ; Clear Req bits
  473.         move.w    #$8200!%1000000,$dff096    ; Enable blitter DMA
  474.         move.w    #$8008,$dff09a        ; Enable Ports Interrupt
  475.         move.l    main_doshandler,a6    ; Get dos handler
  476.         moveq.l    #0,d2            ; STD In=0
  477.         move.l    main_conhandler,d3     ; STD Out=0
  478.         move.l    a0,d1            ; File Name Ptr
  479.         move.l    #main_dataptr,d0
  480.         bsr.w    dos_writeaddy
  481.         jsr    -222(a6)        ; DOS execute
  482.         lea    $dff000,a6
  483.         tst.b    $02(a6)
  484. .wblit:        btst    #6,$02(a6)
  485.         bne.s    .wblit
  486. .w8:        move.l    $04(a6),d0
  487.         and.l    #$1ff00,d0
  488.         cmp.l    #$100*307,d0
  489.         bne.s    .w8
  490.         move.w    #$7de0,$96(a6)
  491.         move.w    #$0008,$9a(a6)
  492.         clr.w    main_lock
  493.         cmp.l    #'EXIT',main_returnvalue
  494.         beq.w    .exit
  495.         cmp.l    #'OK!!',main_returnvalue
  496.         bne.s    .error
  497.         clr.l    main_returnvalue
  498.         rts
  499. .error:        st.b    dos_error
  500.         move.w    #15,main_trappedvector
  501. .exit:        move.l    dos_exitaddy,a0
  502.         jmp    (a0)
  503. dos_exitcp:    rts
  504.  
  505. dos_exitaddy:    dc.l    dos_exitcp
  506. dos_error:    dc.w    0
  507.  
  508. dos_writeaddy:;    in:    d0=addy
  509.         move.w    #$e000,$dff106
  510.         move.b    d0,$dff181
  511.         lsr.l    #8,d0
  512.         move.b    d0,$dff183
  513.         lsr.l    #8,d0
  514.         move.b    d0,$dff185
  515.         lsr.l    #8,d0
  516.         move.b    d0,$dff187
  517.         rts
  518.  
  519. dos_readaddy:;    out:    d0=addy
  520.         move.w    #$0100,$dff104
  521.         move.w    #$e000,$dff106
  522.         move.b    $dff187,d0
  523.         lsl.l    #8,d0
  524.         move.b    $dff185,d0
  525.         lsl.l    #8,d0
  526.         move.b    $dff183,d0
  527.         lsl.l    #8,d0
  528.         move.b    $dff181,d0
  529.         move.w    #$0000,$dff104
  530.         rts
  531.     ENDIF    ; main_disabledos
  532.  
  533.  
  534.     ENDIF    ; main_systemon
  535.  
  536. main_dataptr:    dc.l    main_infoblock        ; Ptr to info block
  537.                 ; NEVER CHANGE ANY POSITIONS IN DATA FROM HERE.
  538. main_datablockstart:
  539. main_returnvalue:dc.l    0    ;-8        ; Return value
  540. main_idcode:    dc.l    'TBL.'    ;-4        ; TBL id code
  541. main_infoblock:    ;------------------------- Info block - (External data ptrs) --
  542. main_counter:    dc.l    0    ;0        ; Main counter (Up 1/VBL)
  543. counter:    dc.l    0    ;4        ; Counter (Up 1/VBL)
  544. timer:        dc.l    0    ;8        ; Timer (Down 1/VBL)
  545. main_timer:    dc.l    0    ;12        ; Main timer
  546. main_vblint:    dc.l    0    ;16        ; Custom VBL int ptr
  547. main_vblint2:    dc.l    0    ;20        ; Custom VBL int ptr
  548. main_bltint:    dc.l    0    ;24        ; Custom BLT int ptr
  549. main_copint:    dc.l    0    ;28        ; Custom COP int ptr
  550. main_module:    dc.l    -1    ;32        ; Module ptr
  551. main_lock:    dc.w    0,0    ;36        ; 0=Ok 2 exit,Other NOT ok.
  552.     IFND    main_loader
  553. main_stimerptr:    dc.l    main_starttimer ;40    ; Code ptr for start timer
  554. main_gtimerptr:    dc.l    main_gettimer    ;44    ; Code ptr for get timer
  555.     ENDIF
  556.     IFD    main_loader
  557. main_stimerptr:    dc.l    0     ;40    ; Code ptr for start timer
  558. main_gtimerptr:    dc.l    0    ;44    ; Code ptr for get timer
  559.     ENDIF
  560. main_framespeed:dc.l    0    ; 48        ; Frames speed        
  561. main_exitaddy:    dc.l    main_exit ; 52
  562. main_trappedvector:dc.w    0,0    ; 56        ; #of trapped vector
  563. main_doshandler:dc.l    0    ; 60        ; Dos handler
  564. main_conhandler:dc.l    0    ; 64        ; Console handler
  565. main_datablockend:
  566. ;                 TO HERE !!! IF SO SYSTEM CRASHES WILL APPEND.
  567.  
  568. main_vbrbase:    dc.l    0            ; VBR Base
  569. main_oldsp:    dc.l    0            ; Saved SP (For exit)
  570.  
  571. ********************************************************************************
  572.  
  573.  
  574.     IFND    main_loader
  575.  
  576. main_starttimer:move.l    main_dataptr,a0
  577.         move.l    (a0),main_savecount
  578.         move.l    $dff004,main_savecount2
  579.         rts
  580.  
  581. main_gettimer:    move.l    main_dataptr,a0
  582.         move.l    (a0),d0
  583.         move.l    $dff004,d1
  584.         move.l    main_savecount,d2
  585.         move.l    main_savecount2,d3
  586.         and.l    #$1ffff,d1
  587.         and.l    #$1ffff,d3
  588.         sub.l    d3,d1        
  589.         sub.l    d2,d0
  590.         mulu    #313,d0
  591.         lsl.l    #8,d0
  592.         add.l    d1,d0
  593.         lsr.l    #1,d0
  594.         move.l    d0,main_timer2
  595.         rts
  596.  
  597. *************************************************************************
  598. * OS related routines                             *
  599. *************************************************************************
  600.  
  601. main_sysinit:    move.l    a7,main_errsp        ; Error sp
  602.         move.l    #main_nodoslib,main_erraddy;Error addy
  603.         tst.b    (a0)
  604.         bne.s    .noclistart
  605.         st.b    .clistartflag
  606. .noclistart:
  607.     IFND    main_short
  608.         tst.w    d0
  609.         beq.s    .skippa
  610.         move.l    a0,main_argv        ; Save arguments
  611.         clr.b    -1(a0,d0.w)
  612.         bsr.w    main_getargs
  613.     ENDIF
  614. .skippa:    lea    main_doslibname,a1    ; Ptr to "dos.library\0"
  615.         move.l    $4,a6            ; Exec lib handler
  616.         jsr    -408(a6)        ; Exec Open lib "dos.library"
  617.         tst.l    d0            ; 0=Error
  618.         beq.w    main_error        ; Handle error
  619.         move.l    main_dataptr,a0
  620.         move.l    d0,60(a0)    ; main_doshandler Save dos handler
  621.         tst.w    .clistartflag
  622.         beq.s    .clistart
  623.         move.l    #main_closedos,main_erraddy; Error addy
  624.         move.l    #main_consolname,d1    ; Window name (Consol)
  625.         move.l    #$3ed,d2        ; Open mode (New)
  626.         move.l    main_dataptr,a6
  627.         move.l    60(a6),a6        ; main_doshandler,a6 Get dos handler
  628.         jsr    -30(a6)            ; Dos open file 
  629.         tst.l    d0            ; Error ? =0
  630.         beq.s    .otherstart        ; No con openend
  631.         st.b    main_printok        ; Set print & con flag
  632.         st.b    main_conuse
  633.         move.l    main_dataptr,a0
  634.         move.l    d0,64(a0)    ; main_conhandler    ; Con handler=Outp Handler
  635.         bra.w    .otherstart        ; Skip Cli start
  636. .clistart:    move.l    main_dataptr,a6
  637.         move.l    60(a6),a6        ; main_doshandler,a6 Get doshandler
  638.         jsr    -60(a6)            ; Dos get current output
  639.         tst.l    d0            ; Error ?
  640.         beq.s    .otherstart        ; Yes don't set flags
  641.         not.b    main_printok        ; Set print flag
  642.         move.l    main_dataptr,a0
  643.         move.l    d0,64(a0)        ; main_conhandler    ; Output handler
  644. .otherstart:    
  645.     IFND    main_skipsysinfo
  646.         bsr.w    main_sysinfo        ; Get system info
  647.     ENDIF
  648.         move.l    #main_dealloc,main_erraddy;Error addy
  649.     IFND    main_debugoff
  650.     IFND    main_systemon
  651.         move.l    $4.w,a6            ; Exec base address
  652.         move.l    #16384,d0        ; Reserve one bpl
  653.         moveq.l    #0,d1            ; must be in chipram
  654.         bset    #16,d1
  655.         jsr    -198(a6)        ; Exec allocmem
  656.  
  657.  
  658.         move.l    d0,kbd_macroptr
  659.         move.l    #20480+4096,d0        ; Reserve one bpl
  660.         moveq.l    #2,d1            ; must be in chipram
  661.         jsr    -198(a6)        ; Exec allocmem
  662.         move.l    d0,main_configscr    ; Save adress
  663.         tst.l    d0
  664.         beq.s    .skippascr
  665.         lea    main_conbplptrs+2,a0    ; Ptr to bplptrs
  666.         move.w    d0,4(a0)        ; Set ...
  667.         swap.w    d0            ; .. bpl..
  668.         move.w    d0,(a0)            ; ..ptrs
  669.         swap.w    d0            ; Clear...
  670.         move.l    d0,a0            
  671.         add.l    #20480,d0        ; Ptr to null sprite
  672.         lea    main_consprptr+2,a1
  673.         move.l    d0,d1
  674.         add.l    #44+8,d1
  675.         swap.w    d1
  676.         move.w    d1,(a1)
  677.         swap.w    d1
  678.         move.w    d1,4(a1)
  679.         addq.l    #8,a1
  680.         moveq.l    #6,d1
  681. .sprloop:    tst.w    d1
  682.         bne.s    .skipspr
  683.         addq.l    #8,d0
  684. .skipspr:    swap.w    d0
  685.         move.w    d0,(a1)
  686.         swap.w    d0
  687.         move.w    d0,4(a1)
  688.         addq.l    #8,a1
  689.         dbra    d1,.sprloop
  690.         move.l    d0,main_mousesprptr
  691.         move.l    d0,a2
  692.         lea    main_mousesprite,a1
  693.         moveq.l    #2*44/4-1,d0
  694. .copysprloop:    move.l    (a1)+,(a2)+
  695.         dbra    d0,.copysprloop
  696.         moveq.l    #0,d0
  697.         move.w    #(20480+8)/4-1,d1
  698. .clrbloop:    move.l    d0,(a0)+
  699.         dbra    d1,.clrbloop        ;..screen
  700. .skippascr:
  701.     ENDIF
  702.     ENDIF
  703.         bra.w    main_sysstartupok
  704. .clistartflag:    dc.w    0
  705.  
  706.  
  707.     IFND    main_short
  708. main_print:    ;a0=ptr to text (0 to end)
  709.         movem.l    d0-a6,-(a7)
  710.     IFND    main_dostextoff
  711.         tst.b    main_printok        ; Ok to print ?
  712.         beq.s    .skip            ; Nope...
  713.         moveq.l    #0,d3            ; Calc..
  714.         move.l    a0,a1
  715. .calcloop:    tst.b    (a1)+
  716.         beq.s    .calcok
  717.         addq.l    #1,d3
  718.         bra.s    .calcloop        ;..str length
  719. .calcok:    tst.l    d3            ; Length 0 ?
  720.         beq.s    .skip            ; Nothing to print
  721.         move.l    a0,d2            : Buffer ptr
  722.         move.l    main_dataptr,a0
  723.         move.l    64(a0),d1        ; main_conhandler,d1    ; Get File handler
  724.         move.l    main_dataptr,a6
  725.         move.l    60(a6),a6    ; main_doshandler,a6    ; Get dos handler
  726.         jsr    -48(a6)            ; Dos write file
  727. .skip:
  728.     ENDIF
  729.         movem.l    (a7)+,d0-a6
  730.         rts
  731.     ENDIF
  732.  
  733. main_error:    move.l    main_erraddy,a0
  734.         move.l    main_errsp,a7
  735.         jmp    (a0)
  736.  
  737.  
  738.  
  739.  
  740.     IFND    main_short
  741. main_getargs:    moveq.l    #0,d6
  742.         lea    main_arglist,a3
  743.         moveq.l    #15,d7
  744. .loop:        bsr.w    .getarg
  745.         tst.l    d0
  746.         beq.s    .exit
  747.         move.l    a1,(a3)+
  748.         addq.l    #1,d6
  749.         dbra    d7,.loop
  750. .exit:        move.l    d6,main_argcount
  751.         rts
  752. .getarg:
  753. .findloop:    move.b    (a0)+,d0
  754.         beq.s    .rts
  755.         cmp.b    #32,d0
  756.         bls.s    .findloop
  757.         cmp.b    #"'",d0
  758.         beq.s    .quote
  759.         cmp.b    #"`",d0
  760.         beq.s    .quote
  761.         cmp.b    #'"',d0
  762.         beq.s    .quote
  763.         move.l    a0,a1
  764.         subq.l    #1,a1            ; a1=Ptr
  765. .noquote:    cmp.b    #32,(a0)+
  766.         bhi.s    .noquote
  767.         tst.b    -1(a0)
  768.         beq.s    .lastarg
  769.         clr.b    -1(a0)
  770.         moveq.l    #-1,d0
  771.         rts
  772. .quote:        move.l    a0,a1            ; a1=Ptr
  773. .findq:        move.b    (a0)+,d0
  774.         cmp.b    #32,d0
  775.         blo.s    .exitq
  776.         cmp.b    #"'",d0
  777.         beq.s    .exitq
  778.         cmp.b    #"`",d0
  779.         beq.s    .exitq
  780.         cmp.b    #'"',d0
  781.         bne.s    .findq
  782. .exitq:        tst.b    -1(a0)
  783.         beq.s    .lastarg
  784.         clr.b    -1(a0)
  785.         moveq.l    #-1,d0
  786.         rts
  787. .lastarg:    clr.b    (a0)            ; Last arg
  788.         moveq.l    #-1,d0
  789.         rts
  790. .rts:        moveq.l    #0,d0            ; d0=0 ==> No more args
  791.         rts
  792.  
  793.  
  794. main_copymem:    ;a0=Source
  795.         ;a1=Dest
  796.         ;d0=Size in bytes
  797.         divu    #11*8,d0    ; d0=Size/12*8
  798.         beq.s    .skiplong
  799.         subq.w    #1,d0
  800.         moveq.l    #11*4,d1
  801.         sub.l    d1,a1
  802. .longloop:    REPT    2
  803.         movem.l    (a0)+,d2-d7/a2-a6
  804.         add.l    d1,a1
  805.         movem.l    d2-d7/a2-a6,(a1)
  806.         ENDR
  807.         dbra    d0,.longloop
  808.         add.l    d1,a1
  809. .skiplong:    clr.w    d0
  810.         swap.w    d0        
  811.         divu    #4,d0
  812.         beq.s    .skiplongword
  813.         subq.w    #1,d0
  814. .longwordloop:    move.l    (a0)+,(a1)+
  815.         dbra    d0,.longwordloop
  816. .skiplongword:    swap.w    d0
  817.         tst.w    d0
  818.         beq.s    .skipbytes
  819.         subq.w    #1,d0
  820. .byteloop:    move.b    (a0)+,(a1)+
  821.         dbra    d0,.byteloop
  822. .skipbytes:    rts
  823.  
  824.     ENDIF
  825.  
  826.  
  827.  
  828.  
  829.     IFND    main_skipsysinfo
  830. main_sysinfo:    
  831. ;----------------------------------------------- Get processors --
  832.         move.l    $4,a6            ; Exec base
  833.         move.b    531(a6),d0
  834.         move.b    d0,main_powerfreq+1
  835.         cmp.b    #50,d0
  836.         beq.w    .powok
  837.     IFD    main_textvaron
  838.         move.l    #main_txtpow60,main_powptr
  839.     ENDIF
  840. .powok:        move.w    296(a6),d0        ; Get system flags
  841.         btst    #0,d0            ; 010?
  842.         beq.s    .no010            ; Nope
  843.         move.w    #1,main_processor    ; Yepp write proc number
  844.     IFD    main_textvaron
  845.         move.l    #main_txt68010,main_procptr ; Set text ptr
  846.     ENDIF
  847. .no010:        btst    #1,d0            ; 020?
  848.         beq.s    .no020            ; Nope
  849.         move.w    #2,main_processor    ; Yepp write proc number
  850.     IFD    main_textvaron
  851.         move.l    #main_txt68020,main_procptr ; Set text ptr
  852.     ENDIF
  853. .no020:        btst    #2,d0            ; 030?
  854.         beq.s    .no030            ; Nope
  855.         move.w    #3,main_processor    ; Yepp write proc number
  856.     IFD    main_textvaron
  857.         move.l    #main_txt68030,main_procptr ; Set text ptr
  858.     ENDIF
  859. .no030:        btst    #4,d0            ; 881?
  860.         beq.s    .no881            ; Nope
  861.         move.w    #1,main_coproc        ; Yepp write coproc number
  862.     IFD    main_textvaron
  863.         move.l    #main_txt68881,main_coprocptr ; Set text ptr
  864.     ENDIF
  865. .no881:        btst    #5,d0            ; 882?
  866.         beq.s    .no882            ; Nope
  867.         move.w    #1,main_coproc        ; Yepp write coproc number
  868.     IFD    main_textvaron
  869.         move.l    #main_txt68882,main_coprocptr ; Set text ptr
  870.     ENDIF
  871. .no882:        btst    #3,d0            ; 040?
  872.         beq.s    .no040            ; Nope
  873.         move.w    #4,main_processor    ; Yepp write proc number
  874.     IFD    main_textvaron
  875.         move.l    #main_txt68040,main_procptr ; Set text ptr
  876.     ENDIF
  877.         move.w    #1,main_coproc        ; 040 built in
  878.     IFD    main_textvaron
  879.         move.l    #main_txt68040b,main_coprocptr ; Set text ptr
  880.     ENDIF
  881. .no040:        btst    #7,d0            ; 060?
  882.         beq.s    .no060            ; Nope
  883.         move.w    #6,main_processor    ; Yepp write proc number
  884.     IFD    main_textvaron
  885.         move.l    #main_txt68060,main_procptr ; Set text ptr
  886.     ENDIF
  887.         move.w    #1,main_coproc        ; 060 built in
  888.     IFD    main_textvaron
  889.         move.l    #main_txt68060b,main_coprocptr ; Set text ptr
  890.     ENDIF
  891. .no060:        btst    #6,d0            ; 851?
  892.         beq.s    .no851            ; Nope
  893.         move.w    #1,main_mmu        ; Yepp write mmu
  894.     IFD    main_textvaron
  895.         move.l    #main_txt68851,main_mmuptr ; Set text ptr
  896.     ENDIF
  897. .no851:;------------------------------------------------------- Get gfx chip --
  898.         lea    $dff07d,a0        ; LisaID
  899.         move.b    (a0),d0
  900.         move.b    d0,d1
  901.         moveq.l    #63,d2
  902. .gfxloop:    and.b    (a0),d1
  903.         dbra    d2,.gfxloop
  904.         cmp.b    d1,d0
  905.         bne.s    .orgdenise
  906.         btst    #1,d0
  907.         bne.s    .noecs
  908.         move.w    #1,main_ecs
  909.     IFD    main_textvaron
  910.         move.l    #main_txtgfxecs,main_gfxptr
  911.     ENDIF
  912. .noecs:        btst    #2,d0
  913.         bne.s    .noaga
  914.         move.w    #1,main_aga
  915.     IFD    main_textvaron
  916.         move.l    #main_txtgfxaga,main_gfxptr
  917.     ENDIF
  918. .noaga:
  919. .orgdenise:    move.l    $4,a0
  920.         move.b    530(a0),d0
  921.         move.b    d0,main_refresh+1
  922.         cmp.b    #50,d0
  923.         beq.w    .refok
  924.     IFD    main_textvaron
  925.         move.l    #main_txtvbl60,main_refreshptr
  926.     ENDIF
  927. .refok:;--------------------------------------------------------- Get memory --
  928.         move.l    $4,a6                ; Exec base
  929.         move.l    62(a6),main_chipmem
  930.  
  931.  
  932.         moveq.l    #4,d1
  933.         bset    #19,d1
  934.         jsr    -216(a6)
  935.     move.l    d0,d6
  936.     bra.s    .okmem
  937.         move.l    d0,-(a7)            ; Save mem
  938.         moveq.l    #0,d1
  939.         moveq.l    #16,d0
  940.         jsr    -198(a6)
  941.         tst.l    d0
  942.         beq.s    .dotest
  943.         move.l    d0,-(a7)
  944.         moveq.l    #4,d1
  945.         bset    #19,d1
  946.         jsr    -216(a6)
  947.         move.l    (a7)+,a1
  948.         move.l    d0,-(a7)
  949.         moveq.l    #16,d0
  950.         jsr    -210(a6)
  951.         move.l    (a7)+,d0
  952.         move.l    (a7)+,d1
  953.         bne.s    .dotest
  954.         moveq.l    #4,d1
  955.         bset    #19,d1
  956.         jsr    -216(a6)
  957.         move.l    d0,d6
  958.         bra.s    .okmem
  959. .dotest:    sub.l    a1,a1
  960.         moveq.l    #31,d7                ; Number of banks
  961.         moveq.l    #0,d6                ; Fast mem found
  962.         move.l    #512*1024,d5            ; Bank size
  963. .findloop:    movem.l    d5-a1,-(a7)
  964.         jsr    -534(a6)
  965.         movem.l    (a7)+,d5-a1
  966.         btst    #0,d0                ; Is it fast mem ?
  967.         beq.s    .memskip
  968.         add.l    d5,d6
  969. .memskip:    add.l    d5,a1
  970.         dbra    d7,.findloop
  971. .okmem:        move.l    d6,main_fastmem    
  972.         moveq.l    #0,d0
  973.         moveq.l    #2,d1
  974.         bset    #17,d1
  975.         jsr    -216(a6)
  976.         move.l    d0,main_availchip
  977.         moveq.l    #0,d0
  978.         moveq.l    #4,d1
  979.         bset    #17,d1
  980.         jsr    -216(a6)
  981.         move.l    d0,main_availfast
  982.         rts
  983.     ENDIF
  984.  
  985.     IFND    main_skipsysinfo
  986. main_showsysinfo:
  987.     IFND    main_sysinfooff
  988.         lea    main_txthi,a0
  989.         bsr.w    main_print
  990.         lea    main_txtpower,a0
  991.         bsr.w    main_print
  992.         move.l    main_powptr,a0
  993.         bsr.w    main_print
  994.         lea    main_txtproc,a0
  995.         bsr.w    main_print
  996.         move.l    main_procptr,a0
  997.         bsr.w    main_print
  998.         lea    main_txtcoproc,a0
  999.         bsr.w    main_print
  1000.         move.l    main_coprocptr,a0
  1001.         bsr.w    main_print
  1002.         lea    main_txtmmu,a0
  1003.         bsr.w    main_print
  1004.         move.l    main_mmuptr,a0
  1005.         bsr.w    main_print
  1006.         lea    main_txtaga,a0
  1007.         bsr.w    main_print
  1008.         move.l    main_gfxptr,a0
  1009.         bsr.w    main_print
  1010.         lea    main_txtvbl,a0
  1011.         bsr.w    main_print
  1012.         move.l    main_refreshptr,a0
  1013.         bsr.w    main_print
  1014.         lea    main_txtmemchip,a0
  1015.         bsr.w    main_print
  1016.         move.l    main_chipmem,d0
  1017.         lsr.l    #8,d0
  1018.         lsr.l    #2,d0
  1019.         bsr.w    main_printdec
  1020.         lea    main_txtmemfast,a0
  1021.         bsr.w    main_print
  1022.         move.l    main_fastmem,d0
  1023.         lsr.l    #8,d0
  1024.         lsr.l    #2,d0
  1025.         bsr.w    main_printdec
  1026.         lea    main_txtkblf,a0
  1027.         bsr.w    main_print
  1028.     ENDIF
  1029.         rts        
  1030.     ENDIF
  1031.  
  1032.     IFND    main_skipsysinfo
  1033. main_checkreq:    moveq.l    #0,d7            ; Nothing checked
  1034.         moveq.l    #0,d6            ; 0 If passed
  1035.     IFND    main_reqinfooff
  1036.         lea    main_txtreq,a0
  1037.         bsr.w    main_print
  1038.     ENDIF
  1039.     IFD    main_reqproc
  1040.     IFND    main_reqinfooff
  1041.         lea    main_txtproc,a0
  1042.         bsr.w    main_print
  1043.     ENDIF
  1044.         move.w    #main_reqproc,d0
  1045.         mulu    #6,d0
  1046.         add.l    #main_txt68000,d0
  1047.         move.l    d0,a0
  1048.     IFND    main_reqinfooff
  1049.         bsr.w    main_print
  1050.         lea    main_txtplus,a0
  1051.         bsr.w    main_print
  1052.     ENDIF
  1053.         lea    main_txtpassed,a0
  1054.         cmp.w    #main_reqproc,main_processor
  1055.         bge.s    .ok00
  1056.         moveq.l    #-1,d6        
  1057.         lea    main_txtfault,a0
  1058. .ok00:
  1059.     IFND    main_reqinfooff
  1060.         bsr.w    main_print
  1061.     ENDIF
  1062.         moveq.l    #1,d7
  1063.     ENDIF
  1064.  
  1065.     IFD    main_reqfpu
  1066.     IFND    main_reqinfooff
  1067.         lea    main_txtcoproc,a0
  1068.         bsr.w    main_print
  1069.     ENDIF
  1070.         lea    main_txtpassed,a0
  1071.         tst.w    main_coproc
  1072.         bne.s    .ok01
  1073.         moveq.l    #-1,d6        
  1074.         lea    main_txtfault,a0
  1075. .ok01:    
  1076.     IFND    main_reqinfooff
  1077.         bsr.w    main_print
  1078.     ENDIF
  1079.         moveq.l    #1,d7
  1080.     ENDIF
  1081.     IFD    main_reqfpu
  1082.     IFND    main_reqinfooff
  1083.         lea    main_txtmmu,a0
  1084.         bsr.w    main_print
  1085.     ENDIF
  1086.         lea    main_txtpassed,a0
  1087.         tst.w    main_mmu
  1088.         bne.s    .ok02
  1089.         moveq.l    #-1,d6        
  1090.         lea    main_txtfault,a0
  1091. .ok02:    
  1092.     IFND    main_reqinfooff
  1093.         bsr.w    main_print
  1094.     ENDIF
  1095.         moveq.l    #1,d7
  1096.     ENDIF
  1097.  
  1098. ;MEM
  1099.  
  1100.  
  1101.     IFD    main_reqfast
  1102.     IFND    main_reqinfooff
  1103.         lea    main_txtfast,a0
  1104.         bsr.w    main_print
  1105.         move.l    #main_reqfast,d0
  1106.         bsr.w    main_printdec
  1107.         lea    main_txtkb,a0
  1108.         bsr.w    main_print
  1109.     ENDIF
  1110.         lea    main_txtpassed,a0
  1111.         cmp.l    #main_reqfast*1024,main_availfast
  1112.         bhs.s    .ok00a
  1113.         moveq.l    #-1,d6        
  1114.         lea    main_txtfault,a0
  1115. .ok00a:
  1116.     IFND    main_reqinfooff
  1117.         bsr.w    main_print
  1118.     ENDIF
  1119.         moveq.l    #1,d7
  1120.     ENDIF
  1121.  
  1122.     IFD    main_reqchip
  1123.     IFND    main_reqinfooff
  1124.         lea    main_txtchip,a0
  1125.         bsr.w    main_print
  1126.         move.l    #main_reqchip,d0
  1127.         bsr.w    main_printdec
  1128.         lea    main_txtkb,a0
  1129.         bsr.w    main_print
  1130.     ENDIF
  1131.         lea    main_txtpassed,a0
  1132.         cmp.l    #main_reqchip*1024,main_availchip
  1133.         bhs.s    .ok00b
  1134.         moveq.l    #-1,d6        
  1135.         lea    main_txtfault,a0
  1136. .ok00b:
  1137.     IFND    main_reqinfooff
  1138.         bsr.w    main_print
  1139.     ENDIF
  1140.         moveq.l    #1,d7
  1141.     ENDIF
  1142.  
  1143.  
  1144.     IFD    main_reqaga
  1145.     IFND    main_reqinfooff
  1146.         lea    main_txtaga,a0
  1147.         bsr.w    main_print
  1148.         lea    main_txtagaplus,a0
  1149.         bsr.w    main_print
  1150.     ENDIF
  1151.         lea    main_txtpassed,a0
  1152.         tst.w    main_aga
  1153.         bne.s    .ok03
  1154.         moveq.l    #-1,d6        
  1155.         lea    main_txtfault,a0
  1156. .ok03:    
  1157.     IFND    main_reqinfooff
  1158.         bsr.w    main_print
  1159.     ENDIF
  1160.         moveq.l    #1,d7
  1161.     ENDIF
  1162.     IFD    main_reqecs
  1163.     IFND    main_reqaga
  1164.     IFND    main_reqinfooff
  1165.         lea    main_txtaga,a0
  1166.         bsr.w    main_print
  1167.         lea    main_txtecsplus,a0
  1168.         bsr.w    main_print
  1169.     ENDIF
  1170.         lea    main_txtpassed,a0
  1171.         tst.w    main_ecs
  1172.         bne.s    .ok04
  1173.         moveq.l    #-1,d6        
  1174.         lea    main_txtfault,a0
  1175. .ok04:
  1176.     IFND    main_reqinfooff
  1177.         bsr.w    main_print
  1178.     ENDIF
  1179.         moveq.l    #1,d7
  1180.     ENDIF
  1181.     ENDIF
  1182.     IFD    main_reqpal
  1183.     IFND    main_reqinfooff
  1184.         lea    main_txtvbl,a0
  1185.         bsr.w    main_print
  1186.         lea    main_txtvbl50,a0
  1187.         bsr.w    main_print
  1188.     ENDIF
  1189.         lea    main_txtpassed,a0
  1190.         cmp.w    #50,main_refresh
  1191.         beq.s    .ok05
  1192.         moveq.l    #-1,d6        
  1193.         lea    main_txtfault,a0
  1194. .ok05:
  1195.     IFND    main_reqinfooff
  1196.         bsr.w    main_print
  1197.     ENDIF
  1198.         moveq.l    #1,d7
  1199.     ENDIF
  1200.     IFD    main_reqntsc
  1201.     IFND    main_reqpal
  1202.     IFND    main_reqinfooff
  1203.         lea    main_txtvbl,a0
  1204.         bsr.w    main_print
  1205.         lea    main_txtvbl60,a0
  1206.         bsr.w    main_print
  1207.     ENDIF
  1208.         lea    main_txtpassed,a0
  1209.         cmp.w    #60,main_refresh
  1210.         beq.s    .ok06
  1211.         moveq.l    #-1,d6        
  1212.         lea    main_txtfault,a0
  1213. .ok06:
  1214.     IFND    main_reqinfooff
  1215.         bsr.w    main_print
  1216.     ENDIF
  1217.         moveq.l    #1,d7
  1218.     ENDIF
  1219.     ENDIF
  1220.  
  1221.         tst.l    d7
  1222.         bne.s    .skip
  1223.     IFND    main_reqinfooff
  1224.         lea    main_txtnoreq,a0
  1225.         bsr.w    main_print
  1226.     ENDIF
  1227.         rts
  1228.         
  1229.  
  1230. .skip:    
  1231.     IFD    main_textvaron
  1232.         lea    main_txtreqpass,a0
  1233.     ENDIF
  1234.         tst.w    d6
  1235.         beq.s    .ok
  1236.     IFD    main_textvaron
  1237.         lea    main_txtreqfault,a0
  1238.     ENDIF
  1239.     IFND    main_systemon
  1240.         move.l    main_dataptr,a1
  1241.         move.w    #11,56(a1)    ; main_trappedvector
  1242.     ENDIF
  1243. .ok:        move.w    d6,main_ok2run
  1244.  
  1245.     IFND    main_reqinfooff
  1246.         bsr.w    main_print
  1247.     IFD    main_systemon
  1248.         lea    main_txtblank,a0
  1249.         bsr.w    main_print
  1250.  
  1251.     ENDIF
  1252.     ENDIF
  1253.         rts
  1254.     ENDIF
  1255.  
  1256.     IFND    main_short        
  1257. main_printdec:    ;in:    d0=Number
  1258.     IFND    main_dostextoff
  1259.         lea    main_txtdec,a0
  1260.         move.l    a0,a1
  1261.         move.l    a1,a2
  1262.         moveq.l    #0,d1
  1263. .loop:        divu    #10,d0
  1264.         swap.w    d0
  1265.         add.b    #48,d0
  1266.         addq.l    #1,d1
  1267.         move.b    d0,(a2)+
  1268.         clr.w    d0
  1269.         swap.w    d0
  1270.         tst.l    d0
  1271.         bne.s    .loop
  1272. .ok:        move.b    #0,(a2)
  1273.         asr.w    #1,d1
  1274.         tst.w    d1
  1275.         beq.s    .skipp
  1276.         subq.w    #1,d1
  1277. .sloop:        move.b    (a1),d0
  1278.         move.b    -(a2),(a1)+
  1279.         move.b    d0,(a2)
  1280.         dbra    d1,.sloop
  1281. .skipp:    
  1282.         bra.w    main_print
  1283.     ENDIF
  1284.         rts
  1285.     ENDIF
  1286.  
  1287. main_turncacheoff:
  1288.         dc.l    $4e7a1002    ;movec cacr,d1
  1289.         move.l    d1,main_cachereg
  1290.         rte
  1291.  
  1292. main_turncacheon:
  1293.         move.l    main_cachereg,d0
  1294.         dc.l    $4e7b0002    ;movec d0,cacr
  1295.         rte
  1296.  
  1297.     IFND    main_systemon         ; End almost at ottom of source
  1298.     IFND    main_endinfooff
  1299.     IFND    main_skipsysinfo
  1300. main_exitmsg:    lea    main_txtendc,a0
  1301.         bsr.w    main_print
  1302.         move.l    main_dataptr,a0
  1303.         move.w    56(a0),d0        ; main_trappedvector,d0
  1304.         lsl.w    #3,d0
  1305.         lea    main_vectorlist,a0
  1306.         move.l    (a0,d0.w),a0
  1307.         bsr.w    main_print
  1308.         lea    main_txtafter,a0
  1309.         bsr.w    main_print
  1310.         move.l    main_counter2,d0
  1311.         divu    main_powerfreq,d0
  1312.         swap.w    d0
  1313.         clr.w    d0
  1314.         swap.w    d0            ; d0=#of seconds
  1315.         divu    #60,d0
  1316.         swap.w    d0
  1317.         move.w    d0,d1
  1318.         clr.w    d0
  1319.         swap.w    d0            ; d0=#of mins
  1320.         swap.w    d1
  1321.         clr.w    d1
  1322.         swap.w    d1            ; d1=#of secs mod 60
  1323.         exg.l    d0,d1
  1324.         moveq.l    #0,d7
  1325.         tst.w    d1
  1326.         beq.s    .skipmin
  1327.         move.l    d0,-(a7)
  1328.         move.l    d1,d0
  1329.         move.l    d0,-(a7)
  1330.         bsr.w    main_printdec        ; Write mins
  1331.         move.l    (a7)+,d0
  1332.         lea    main_txtminute,a0
  1333.         cmp.l    #1,d0
  1334.         beq.s    .skipmins
  1335.         lea    main_txtminutes,a0
  1336. .skipmins:    bsr.w    main_print
  1337.         move.l    (a7)+,d0
  1338.         beq.s    .skipmin
  1339.         move.l    d0,-(a7)
  1340.         lea    main_txtand,a0
  1341.         bsr.w    main_print
  1342.         move.l    (a7)+,d0
  1343.         moveq.l    #-1,d7
  1344. .skipmin:    tst.w    d0
  1345.         beq.s    .skipsec
  1346.         move.l    d0,-(a7)
  1347.         bsr.w    main_printdec        ; Write secs
  1348.         move.l    (a7)+,d0
  1349.         lea    main_txtsecond,a0
  1350.         cmp.l    #1,d0
  1351.         beq.s    .skipsecs
  1352.         lea    main_txtseconds,a0
  1353. .skipsecs:    move.l    d0,-(a7)
  1354.         bsr.w    main_print
  1355.         move.l    (a7)+,d0
  1356. .skipsec:    tst.l    d0    
  1357.         bne.s    .ok1
  1358.         tst.l    d7
  1359.         bne.s    .ok1
  1360.         lea    main_txtnonetime,a0
  1361.         bsr.w    main_print
  1362. .ok1:        lea    main_txtend,a0
  1363.         bsr.w    main_print
  1364.         rts
  1365.     ENDIF
  1366.     ENDIF
  1367.  
  1368.  
  1369. *************************************************************************
  1370. * Disable/Restore OS routines                         *
  1371. *************************************************************************
  1372.  
  1373. main_disablesystem:;---------------------------- Get VBR and turn caches off --
  1374.         move.l    $4,a6            ; Exec base
  1375.         tst.b    297(a6)            ; Test processor flags
  1376.         beq.s    .novbr            ; No vbr = 68000
  1377.         lea    main_getvbr,a5        ; Pytr to supervisor routine
  1378.         jsr    -30(a6)            ; Supervisor
  1379.     IFD    main_cacheoff
  1380.         btst.b    #0,297(a6)        ; Test 68010 flag
  1381.         bne.s    .novbr            ; 68010 has no cache
  1382.         move.w    #1,main_cacheok        ; Set flag
  1383.         lea    main_turncacheoff,a5    ; Ptr to supervisor routine
  1384.         jsr    -30(a6)            ; Supervisor
  1385.         lea    main_txtcache,a0    ; Write message
  1386.         bsr.w    main_print        
  1387.     ENDIF
  1388. .novbr:;--------------------------------------- Open GFX lib and save stuff --
  1389.         lea    main_gfxlibname,a1        ; Ptr to gfxlib name
  1390.         jsr    -408(a6)            ; Open gfx lib
  1391.         tst.l    d0                ; Error?
  1392.         beq.w    main_error            ; Yepp :(
  1393.         move.l    d0,main_gfxhandler        ; Save base
  1394.         move.l    d0,a6                ; Gfx base ptr
  1395.         move.l    $22(a6),main_oldactscreen    ; Screen ptr
  1396.         move.l    $26(a6),main_oldcopper1        ; Save oldcopper1
  1397.         move.l    $32(a6),main_oldcopper2        ; Save oldcopper2
  1398.         move.l    a6,-(a7)
  1399.         lea    $dff000,a6        ; Custom base address
  1400.         tst.b    $02(a6)            ; Used for OLD agnus bug
  1401. .waitblit:    btst    #6,$02(a6)        ; Test BLTBSY
  1402.         bne.s    .waitblit        ; blitter isn't finnished
  1403.         move.w    $1c(a6),main_oldintena    ; Save intena
  1404.         move.w    $10(a6),main_oldadkcon    ; Save adkcon bits
  1405.         move.w    #$7fff,$9a(a6)        ; Disable ALL interrupts
  1406.     IFND    main_short
  1407.         bsr.w    main_fadeoutwb
  1408.     ENDIF
  1409.         move.l    (a7)+,a6
  1410.         sub.l    a1,a1                ; Clear a1
  1411.         jsr    -222(a6)            ; Load View
  1412.         jsr    -270(a6)            ; WaitTOF
  1413.         jsr    -270(a6)            ; WaitTOF
  1414.         move.b    $ec(a6),d0            ; Get chip rev no
  1415.         and.b    #$03,d0                ; ECS ?
  1416.         beq.s    .noECS                ; ECS not found
  1417.         move.l    370(a6),a2
  1418.         move.w    $28(a2),main_oldbeamcon        ; Save beam control
  1419. .noECS:;------------------------------------------------- Save DMA and Stuff --
  1420.         lea    $dff000,a6        ; Custom base address
  1421.         move.w    $1e(a6),main_oldintreq    ; Save intreq
  1422.         move.w    #$7fff,$9e(a6)        ; Disable ALL interrupt reqs
  1423.         move.w    $2(a6),main_olddmacon    ; Save old dma con
  1424.         bsr.w    main_storevectors    ; Save system vectors
  1425.         tst.b    $02(a6)            ; Used for OLD agnus bug
  1426. .waitblit1:    btst    #6,$02(a6)        ; Test BLTBSY
  1427.         bne.s    .waitblit1        ; blitter isn't finnished
  1428. .waitvbl:    move.l    $04(a6),d0        ; Get Rast pos
  1429.         and.l    #$1ff00,d0        ; Mask out vertical bits
  1430.         cmp.l    #301*256,d0        ; Wait row
  1431.         bne.s    .waitvbl        ; Not reached
  1432.         move.w    #$7fff,$96(a6)        ; disable ALL dma
  1433.         move.w    #$0020,$1dc(a6)        ; Normal view mode
  1434. .waitvbl1:    move.l    $04(a6),d0        ; Get Rast pos
  1435.         and.l    #$1ff00,d0        ; Mask out vertical bits
  1436.         cmp.l    #300*256,d0        ; Wait row
  1437.         bne.s    .waitvbl1        ; Not reached
  1438.         lea    $140(a6),a5
  1439.         moveq.l    #$10,d1
  1440.         moveq.l    #$7,d2
  1441.         moveq.l    #0,d3
  1442. .sprclloop:    move.l    d3,(a5)
  1443.         add.l    d1,a5
  1444.         dbra    d2,.sprclloop
  1445.         Move.b #0,$DE0000        ; ramsey
  1446.     IFND    main_disableint
  1447.         move.w    #$c020,$9a(a6)        ; Enable level 3 int
  1448.     ENDIF
  1449.         move.b    $bfe001,main_oldbfe001
  1450.         
  1451.         bset.b    #1,$bfe001
  1452.         rts
  1453.  
  1454. main_oldbfe001:    dc.w    0
  1455.  
  1456. main_restoresystem:;---------------------------------------- Restore DMA etc --
  1457.     IFND    main_playeroff
  1458.         main_musicstop
  1459.     ENDIF
  1460.         move.b    main_oldbfe001,d0
  1461.         btst    #1,d0
  1462.         bne.s    .skipled
  1463.         bclr.b    #1,$bfe001
  1464. .skipled:
  1465.     IFND    main_short
  1466.         bsr.w    main_fadeinwbfix
  1467.     ENDIF
  1468.         lea    $dff000,a6        ; Custom base
  1469.         move.w    #$7fff,$9a(a6)        ; Disable all interrupts intena
  1470.         tst.b    $02(a6)            ; OLD agnus bug
  1471. .waitblit:    btst    #6,$02(a6)        ; Test BLTBSY
  1472.         bne.s    .waitblit        ; Blitter not finnished
  1473. .waitvbl:    move.l    $04(a6),d0        ; Get Rast pos
  1474.         and.l    #$1ff00,d0        ; Mask out vertical bits
  1475.         cmp.l    #301*256,d0            ; Wait row
  1476.         bne.s    .waitvbl        ; Not reached
  1477.         move.w    #$7fff,$96(a6)        ; Clear ALL DMA
  1478.         move.l    #$7fff7fff,$9c(a6)    ; Clear INTREQ & ADKCON
  1479.         or.w    #$8000,main_oldadkcon    ; Set set bit
  1480.         or.w    #$c000,main_oldintena    ; Set set bit
  1481.         or.w    #$8000,main_oldintreq    ; Set set bit    
  1482.         or.w    #$8200,main_olddmacon    ; Set set bit    
  1483.         bsr.w    main_restorevectors    ; Restore system vectors
  1484. .waitvbl2:    move.l    $04(a6),d0        ; Get Rast pos
  1485.         and.l    #$1ff00,d0        ; Mask out vertical bits
  1486.         cmp.l    #300*256,d0        ; Wait row
  1487.         bne.s    .waitvbl2        ; Not reached
  1488.         move.w    main_olddmacon,$96(a6)    ; Restore DMA
  1489.         move.w    main_oldadkcon,$9e(a6)    ; Restore ADKCON
  1490.         move.w    main_oldintena,$9a(a6)    ; Restore INTENA
  1491.         move.w    main_oldintreq,$9c(a6)    ; Restore INTREQ
  1492.         move.l    main_oldcopper1,$80(a6)    ; Restore system copper 1
  1493.         move.l    main_oldcopper2,$84(a6)    ; Restore system copper 2
  1494.         move.w    #0,$88(a6)        ; Strobe copper
  1495. ;--------------------------------------------------- Fix view & close doslib --
  1496.         move.l    main_gfxhandler,a6    ; Get GFXlib handler
  1497.         move.l    main_oldactscreen,a1    ; Get actscreen
  1498.         jsr    -222(a6)        ; Set system View
  1499.         jsr    -270(a6)        ; WaitTOF
  1500.         jsr    -270(a6)        ; WaitTOF
  1501.         move.l    a6,a1            ; Gfx handler
  1502.         move.l    $4,a6            ; Exec base
  1503.         jsr    -414(a6)        ; Exec close lib
  1504.     IFND    main_short
  1505.         bsr.w    main_fadeinwb
  1506.     ENDIF
  1507.         rts
  1508.  
  1509.     IFND    main_short
  1510.  
  1511.     IFND    main_rgbfadeto
  1512. main_rgbfadeto    =    $000
  1513.     ENDIF
  1514.  
  1515.     IFND    main_rgbfadefrom
  1516. main_rgbfadefrom=    $000
  1517.     ENDIF
  1518.     
  1519. main_fadeoutwb:
  1520.     IFND    main_faderoff
  1521.         move.l    main_oldcopper1,a0
  1522.         moveq.l    #0,d0
  1523.         bsr.w    .loop
  1524.         move.l    main_oldcopper2,a0
  1525.         bsr.w    .loop
  1526.         move.l    d0,main_wbcolours
  1527.         mulu    #6,d0            ; #of bytes to reserve !!
  1528.         move.l    $4.w,a6            ; Exec base address
  1529.         moveq.l    #0,d1
  1530.         jsr    -198(a6)        ; Exec allocmem
  1531.         move.l    d0,main_wbaddress
  1532.         tst.l    d0
  1533.         beq.w    .skip
  1534.         move.l    d0,a1
  1535.         move.l    main_oldcopper1,a0
  1536.         bsr.w    .loop2
  1537.         move.l    main_oldcopper2,a0
  1538.         bsr.w    .loop2
  1539.         moveq.l    #$f,d0
  1540. .fadeloop:    move.l    main_wbcolours,d1
  1541.         subq.w    #1,d1
  1542.         move.l    main_wbaddress,a0
  1543. .sync:        move.l    $dff004,d2
  1544.         and.l    #$1ff00,d2
  1545.         cmp.l    #308*$100,d2
  1546.         beq.s    .sync
  1547. .sync1:        move.l    $dff004,d2
  1548.         and.l    #$1ff00,d2
  1549.         cmp.l    #308*$100,d2
  1550.         bne.s    .sync1
  1551. .colloop:    move.w    (a0)+,d2
  1552.         move.w    d2,d3
  1553.         move.w    d2,d4
  1554.         move.w    d2,d5
  1555.         and.w    #$f00,d3
  1556.         lsr.w    #8,d3
  1557.         and.w    #$f0,d4
  1558.         lsr.w    #4,d4
  1559.         and.w    #$f,d5
  1560.         sub.w    #(main_rgbfadeto&$f00)>>8,d3
  1561.         sub.w    #(main_rgbfadeto&$f0)>>4,d4
  1562.         sub.w    #(main_rgbfadeto&$f),d5
  1563.         muls    d0,d3
  1564.         muls    d0,d4
  1565.         muls    d0,d5
  1566.         divs    #$f,d3
  1567.         divs    #$f,d4
  1568.         divs    #$f,d5
  1569.         add.w    #(main_rgbfadeto&$f00)>>8,d3
  1570.         add.w    #(main_rgbfadeto&$f0)>>4,d4
  1571.         add.w    #(main_rgbfadeto&$f),d5
  1572.         lsl.w    #8,d3
  1573.         lsl.w    #4,d4
  1574.         or.w    d4,d3
  1575.         or.w    d5,d3
  1576.         move.l    (a0)+,a1
  1577.         move.w    d3,(a1)
  1578.         dbra    d1,.colloop
  1579.         dbra    d0,.fadeloop
  1580. .skip:        rts
  1581. .loop:        move.l    (a0)+,d1
  1582.         swap.w    d1
  1583.         cmp.l    #$fffeffff,d1
  1584.         beq.s    .exit
  1585.         btst    #0,d1
  1586.         bne.s    .loop
  1587.         cmp.w    #$0088,d1
  1588.         beq.s    .exit
  1589.         cmp.w    #$008a,d1
  1590.         beq.s    .exit
  1591.         cmp.w    #$180,d1
  1592.         blo.s    .loop
  1593.         cmp.w    #$1be,d1
  1594.         bhi.s    .loop
  1595.         addq.l    #1,d0
  1596.         bra.s    .loop
  1597. .exit:        rts
  1598. .loop2:        move.l    (a0)+,d1
  1599.         swap.w    d1
  1600.         cmp.w    #$ffff,d1
  1601.         beq.s    .exit2
  1602.         btst    #0,d1
  1603.         bne.s    .loop2
  1604.         cmp.w    #$0088,d1
  1605.         beq.s    .exit2
  1606.         cmp.w    #$008a,d1
  1607.         beq.s    .exit2
  1608.         cmp.w    #$180,d1
  1609.         blo.s    .loop2
  1610.         cmp.w    #$1be,d1
  1611.         bhi.s    .loop2
  1612.         swap.w    d1
  1613.         move.w    d1,(a1)+
  1614.         subq.l    #2,a0
  1615.         move.l    a0,(a1)+
  1616.         addq.l    #2,a0
  1617.         bra.s    .loop2
  1618. .exit2:    
  1619.     ENDIF
  1620.         rts
  1621.  
  1622. main_fadeinwb:
  1623.     IFND    main_faderoff
  1624.         tst.l    main_wbaddress
  1625.         beq.w    .exit
  1626.         moveq.l    #$f,d0
  1627. .fadeloop:    move.l    main_wbcolours,d1
  1628.         subq.w    #1,d1
  1629.         move.l    main_wbaddress,a0
  1630. .sync:        move.l    $dff004,d2
  1631.         and.l    #$1ff00,d2
  1632.         cmp.l    #308*$100,d2
  1633.         beq.s    .sync
  1634. .sync1:        move.l    $dff004,d2
  1635.         and.l    #$1ff00,d2
  1636.         cmp.l    #308*$100,d2
  1637.         bne.s    .sync1
  1638. .colloop:    move.w    (a0)+,d2
  1639.         move.w    d2,d3
  1640.         move.w    d2,d4
  1641.         move.w    d2,d5
  1642.         and.w    #$f00,d3
  1643.         lsr.w    #8,d3
  1644.         and.w    #$f0,d4
  1645.         lsr.w    #4,d4
  1646.         and.w    #$f,d5
  1647.         sub.w    #(main_rgbfadefrom&$f00)>>8,d3
  1648.         sub.w    #(main_rgbfadefrom&$f0)>>4,d4
  1649.         sub.w    #(main_rgbfadefrom&$f),d5
  1650.         move.w    d0,d2
  1651.         neg.w    d2
  1652.         add.w    #$f,d2
  1653.         muls    d2,d3
  1654.         muls    d2,d4
  1655.         muls    d2,d5
  1656.         divs    #$f,d3
  1657.         divs    #$f,d4
  1658.         divs    #$f,d5
  1659.         add.w    #(main_rgbfadefrom&$f00)>>8,d3
  1660.         add.w    #(main_rgbfadefrom&$f0)>>4,d4
  1661.         add.w    #(main_rgbfadefrom&$f),d5
  1662.         lsl.w    #8,d3
  1663.         lsl.w    #4,d4
  1664.         or.w    d4,d3
  1665.         or.w    d5,d3
  1666.         move.l    (a0)+,a1
  1667.         move.w    d3,(a1)
  1668.         dbra    d1,.colloop
  1669.         dbra    d0,.fadeloop
  1670.         move.l    main_wbaddress,a1
  1671.         move.l    main_wbcolours,d0
  1672.         mulu    #6,d0
  1673.         move.l    $4.w,a6
  1674.         jsr    -210(a6)
  1675. .exit:
  1676.     ENDIF
  1677.         rts
  1678.  
  1679. main_fadeinwbfix:
  1680.     IFND    main_faderoff
  1681.         tst.l    main_wbaddress
  1682.         beq.w    .exit
  1683.         move.l    main_wbcolours,d1
  1684.         subq.w    #1,d1
  1685.         move.l    main_wbaddress,a0
  1686. .sync:        move.l    $dff004,d2
  1687.         and.l    #$1ff00,d2
  1688.         cmp.l    #308*$100,d2
  1689.         beq.s    .sync
  1690. .sync1:        move.l    $dff004,d2
  1691.         and.l    #$1ff00,d2
  1692.         cmp.l    #308*$100,d2
  1693.         bne.s    .sync1
  1694. .colloop:    move.w    (a0)+,d2
  1695.         move.l    (a0)+,a1
  1696.         move.w    #(main_rgbfadefrom&$f),(a1)
  1697.         dbra    d1,.colloop
  1698. .exit:
  1699.     ENDIF
  1700.         rts
  1701.  
  1702. main_wbcolours:    dc.l    0
  1703. main_wbaddress:    dc.l    0
  1704.     ENDIF
  1705.  
  1706. main_storevectors:
  1707.         move.l    main_vbrbase,a0        ; VBR base address
  1708.         move.l    a0,a3            ; VBR base address
  1709.         addq.l    #8,a0            ; Ptr to first vector
  1710.         lea    main_oldvectors,a1    ; Ptr to old vectors
  1711.     IFND    main_disableint
  1712.         lea    .trapvcode,a2        ; Ptr to trap code
  1713.     ENDIF
  1714.         move.w    #main_vectortrap,d1    ; Get vectors to trap
  1715.         moveq.l    #9,d0            ; #of vectors
  1716. .loop:        move.l    (a0)+,(a1)+        ; Save vector
  1717.     IFND    main_disableint
  1718.         btst    d0,d1            ; Trap vector ?
  1719.         beq.s    .notrap            ; Not !
  1720.         move.l    a2,-4(a0)        ; Set new vector
  1721. .notrap:    add.l    #.lenchk-.trapvcode,a2    ; Next trap vector code
  1722.     ENDIF
  1723.         dbra    d0,.loop        ; Next vector
  1724.         move.l    a3,a0            ; First vector
  1725.         add.w    #$64,a3            ; First int vector
  1726.         moveq.l    #6,d0            ; 7 int vectors
  1727. .intloop:    move.l    (a3)+,(a1)+        ; Save vector
  1728.         dbra    d0,.intloop        
  1729.         move.b    $bfec01,main_lastkey
  1730.     IFND    main_disableint
  1731.         move.l    #main_level3int,$6c(a0)    ; Set to our level 3    
  1732.     IFD    main_trap7
  1733.         move.l    #main_level7int,$7c(a0)    ; Set to our level 7
  1734.     ENDIF
  1735.     ENDIF
  1736.         rts    
  1737.     IFND    main_disableint
  1738. .trapvcode:    move.l    a0,-(a7)
  1739.         move.l    main_dataptr,a0
  1740.         move.w    #1,56(a0)        ; main_trappedvector
  1741.         move.l    (a7)+,a0
  1742. .lenchk:    jmp    main_interrupt
  1743.         move.l    a0,-(a7)
  1744.         move.l    main_dataptr,a0
  1745.         move.w    #2,56(a0)        ; main_trappedvector
  1746.         move.l    (a7)+,a0
  1747.         jmp    main_interrupt
  1748.         move.l    a0,-(a7)
  1749.         move.l    main_dataptr,a0
  1750.         move.w    #3,56(a0)        ; main_trappedvector
  1751.         move.l    (a7)+,a0
  1752.         jmp    main_interrupt
  1753.         move.l    a0,-(a7)
  1754.         move.l    main_dataptr,a0
  1755.         move.w    #4,56(a0)        ; main_trappedvector
  1756.         move.l    (a7)+,a0
  1757.         jmp    main_interrupt
  1758.         move.l    a0,-(a7)
  1759.         move.l    main_dataptr,a0
  1760.         move.w    #5,56(a0)        ; main_trappedvector
  1761.         move.l    (a7)+,a0
  1762.         jmp    main_interrupt
  1763.         move.l    a0,-(a7)
  1764.         move.l    main_dataptr,a0
  1765.         move.w    #6,56(a0)        ; main_trappedvector
  1766.         move.l    (a7)+,a0
  1767.         jmp    main_interrupt
  1768.         move.l    a0,-(a7)
  1769.         move.l    main_dataptr,a0
  1770.         move.w    #7,56(a0)        ; main_trappedvector
  1771.         move.l    (a7)+,a0
  1772.         jmp    main_interrupt
  1773.         move.l    a0,-(a7)
  1774.         move.l    main_dataptr,a0
  1775.         move.w    #8,56(a0)        ; main_trappedvector
  1776.         move.l    (a7)+,a0
  1777.         jmp    main_interrupt
  1778.         move.l    a0,-(a7)
  1779.         move.l    main_dataptr,a0
  1780.         move.w    #9,56(a0)        ; main_trappedvector
  1781.         move.l    (a7)+,a0
  1782.         jmp    main_interrupt
  1783.         move.l    a0,-(a7)
  1784.         move.l    main_dataptr,a0
  1785.         move.w    #10,56(a0)        ; main_trappedvector
  1786.         move.l    (a7)+,a0
  1787.         jmp    main_interrupt
  1788.     ENDIF
  1789.     
  1790. main_restorevectors:
  1791.         move.l    main_vbrbase,a0        ; VBR base address
  1792.         move.l    a0,a3            ; VBR base address
  1793.         addq.l    #8,a0            ; Ptr to first vector
  1794.         lea    main_oldvectors,a1    ; Ptr to old vectors
  1795.         moveq.l    #9,d0            ; #of vectors
  1796. .loop:        move.l    (a1)+,(a0)+        ; Restore vector
  1797.         dbra    d0,.loop        ; Next vector
  1798.         add.w    #$64,a3            ; First in vector
  1799.         moveq.l    #6,d0            ; 7 int vectors
  1800. .intloop:    move.l    (a1)+,(a3)+        ; Save vector
  1801.         dbra    d0,.intloop        
  1802.         rts
  1803.  
  1804.     IFND    main_disableint
  1805.  
  1806. main_interrupt:    IFND    MAIN_DEBUGOFF
  1807.         jmp    main_verticalint
  1808.         ENDIF
  1809.         IFD    MAIN_DEBUGOFF
  1810.         move.l    a0,.old
  1811.         move.l    main_dataptr,a0
  1812.         move.l    58(a0),$02(a7)        ; Main_ExitAddy
  1813.         move.l    .old,a0
  1814.         rte
  1815. .old:        dc.l    0        
  1816.         ENDIF
  1817.  
  1818.         IFD    main_trap7
  1819. main_level7int:    move.l    a0,-(a7)
  1820.         move.l    main_vbrbase,a0
  1821.         move.l    #.rte,$7c(a0)
  1822.         move.l    (a7)+,a0
  1823. .loop:        cmp.l    #main_level7int,$02(a7)
  1824.         beq.s    .notok
  1825.         cmp.l    #.rte,$02(a7)
  1826.         bne.s    .ok
  1827. .notok:        addq.l    #6,a7
  1828.         bra.s    .loop
  1829. .ok:        move.w    #12,main_trappedvector
  1830. .loop2:        cmp.l    #main_level7int,$02(a7)
  1831.         beq.s    .notok2
  1832.         cmp.l    #.rte,$02(a7)
  1833.         bne.s    .ok2
  1834. .notok2:    addq.l    #6,a7
  1835.         bra.s    .loop2
  1836. .ok2:        jmp    main_interrupt
  1837. .rte:        rte
  1838.         ENDIF
  1839.  
  1840.  
  1841. *************************************************************************
  1842. * Interrupt related routines                        *
  1843. *************************************************************************
  1844.  
  1845. main_level3int:    btst.b    #4,$dff01f        ; COP int ?
  1846.         bne.s    main_copperint        ; Yes
  1847.         btst.b    #5,$dff01f        ; VBL int ?
  1848.         bne.s    main_verticalint    ; Yes
  1849.         btst.b    #6,$dff01f        ; BLT int ?
  1850.         bne.s    main_blitterint        ; Yes
  1851.         rte                ; ?????
  1852.  
  1853. main_copperint:    movem.l    d0-a6,-(a7)
  1854.         move.l    main_dataptr,a0
  1855.         move.l    28(a0),a0        ; Get COPint ptr
  1856.         cmp.l    #0,a0
  1857.         beq.s    .noint
  1858.         jsr    (a0)
  1859. .noint:        movem.l    (a7)+,d0-a6    
  1860.         move.w    #$0010,$dff09c        ; Clear REQ bits
  1861.         rte
  1862.  
  1863. main_blitterint:movem.l    d0-a6,-(a7)
  1864.         move.l    main_dataptr,a0
  1865.         move.l    24(a0),a0        ; Get BLTInt ptr
  1866.         cmp.l    #0,a0
  1867.         beq.s    .noint
  1868.         jsr    (a0)
  1869. .noint:        movem.l    (a7)+,d0-a6    
  1870.         move.w    #$0040,$dff09c        ; Clear REQ bits
  1871.         rte
  1872.  
  1873. main_verticalint:    
  1874.         tst.w    main_novbl
  1875.         bne.w    .noclose
  1876.         move.l    a7,main_registers+15*4    ; Save SP
  1877.         lea    main_registers+15*4,a7    ; Register ptr
  1878.         movem.l    d0-a6,-15*4(a7)
  1879.         move.l    (a7),a7            ; Restore SP
  1880.         move.w    (a7),main_usersr    ; Save SR
  1881.         move.l    2(a7),main_userpc    ; Save user PC
  1882. .skippr:    movem.l    d0-a6,-(a7)        ; Save registers
  1883.     IFND    main_debugoff
  1884.         tst.w    main_configscreen    ; Is configscreen up ?
  1885.         bne.w    .configint        ; Yes do special config int
  1886.     ENDIF
  1887.         tst.w    main_forcedebug
  1888.         bne.w    .forcedebug
  1889.         move.l    main_dataptr,a0
  1890.         tst.w    56(a0)            ; main_trappedvector
  1891.         bne.w    .forcedebug
  1892.     IFND    main_noexit
  1893.     IFD    main_usermb
  1894.         clr.w    main_readakey
  1895.         btst    #2,$dff016        ; Right mouse buttom ?
  1896.         beq.w    .forcedebug        ; Yepp...
  1897.     ENDIF
  1898.     IFD    main_uselmb
  1899.         clr.w    main_readakey
  1900.         btst    #6,$bfe001        ; Left mouse buttom ?
  1901.         beq.s    .forcedebug        ; Yepp...
  1902.     ENDIF
  1903.     ENDIF
  1904.     IFND    main_debugoff
  1905.         tst.w    main_contrace
  1906.         bne.w    .forcedebug
  1907.     ENDIF
  1908. .continue:    move.l    main_dataptr,a0
  1909.         addq.l    #1,(a0)            ; Increase main counter
  1910.         addq.l    #1,4(a0)        ; Increase counter
  1911.         addq.l    #1,main_counter2
  1912.         tst.l    8(a0)            ; Timer countdown?
  1913.         beq.s    .nodectimer        ; Nopie..
  1914.         subq.l    #1,8(a0)        ; Decrease timer
  1915. .nodectimer:    tst.l    12(a0)            ; main_Timer countdown?
  1916.         beq.s    .nodectimer1        ; Nopie..
  1917.         subq.l    #1,12(a0)        ; Decrease main_timer
  1918. .nodectimer1:    move.l    16(a0),d0        ; Get VBLint
  1919.         beq.s    .skipcustom
  1920.         move.l    d0,a0
  1921.         jsr    (a0)
  1922. .skipcustom:    move.l    main_dataptr,a0
  1923.         move.l    20(a0),d0        ; Get VBLInt2
  1924.         beq.s    .skipcustom2
  1925.         move.l    d0,a0
  1926.         jsr    (a0)
  1927. .skipcustom2:
  1928. ;------------------------------------------- Music stuff --
  1929.     IFND    main_playeroff
  1930.         tst.w    main_play
  1931.         beq    .noplay
  1932.         main_musicplay
  1933. .noplay:    move.l    main_dataptr,a0
  1934.         move.l    32(a0),d0        ; Get MAIN_MOdule
  1935.         beq.s    .stopmusic
  1936.         cmp.l    #-1,32(a0)
  1937.         beq.s    .skipmusic
  1938.         move.l    d0,a0
  1939.         sub.l    a1,a1
  1940.         main_musicinit
  1941.         move.l    main_dataptr,a0
  1942.         move.l    #-1,32(a0)        ; Clear main_module
  1943.         st.b    main_play
  1944.         bra.s    .skipmusic
  1945. .stopmusic:    main_musicstop
  1946.         move.l    main_dataptr,a0
  1947.         move.l    #-1,32(a0)
  1948. .skipmusic:
  1949.     ENDIF
  1950. ;----------------------------------------------- Music end --
  1951.  
  1952.     IFND    main_meteroff
  1953.         bsr.w    main_frameint
  1954.     ENDIF
  1955. .exitint:
  1956.     IFD    main_length
  1957.         tst.l    main_timer
  1958.         bne.s    .skipquit
  1959.         move.l    #main_exit,main_userpc
  1960. .skipquit:
  1961.     ENDIF
  1962.         movem.l    (a7)+,d0-a6        ; Restore registers
  1963.         move.l    main_userpc,2(a7)    ; Restore PC
  1964.     IFND    main_debugoff
  1965.         tst.w    main_configexit        ; Close config ?
  1966.         beq.s    .noclose        ; Nopie...
  1967.         move.w    #0,main_configexit    ; Clear flag
  1968.         move.w    #0,main_configscreen    ; Clear flag
  1969.         move.w    main_configsr,(a7)    ; Restore SR
  1970.         move.l    main_configpc,2(a7)    ; Restore PC
  1971.         move.l    a7,main_configregs+15*4    ; Save sp
  1972.         lea    main_configregs+15*4,a7    ; Ptr to saved registers
  1973.         movem.l    -15*4(a7),d0-a6
  1974.         move.l    (a7),a7
  1975.     ENDIF
  1976.         move.l    a0,-(a7)
  1977.         move.l    main_vbrbase,a0
  1978.     IFD    main_trap7
  1979.         move.l    #main_level7int,$7c(a0)
  1980.     ENDIF
  1981.         move.l    (a7)+,a0
  1982. .noclose:    move.w    #$0020,$dff09c        ; Clear REQ bits
  1983.         rte
  1984. ;------------------------------------ Force debug mode --
  1985. .forcedebug:    move.l    main_dataptr,a0
  1986.         tst.w    36(a0)
  1987.         beq.s    .ok2exit
  1988.         st.b    main_forcedebug
  1989.         bra.w    .continue
  1990. .ok2exit:    cmp.w    #14,56(a0)        ; main_trappedvector
  1991.         bge.w    .continue        
  1992.  
  1993.         clr.w    main_forcedebug    
  1994.     IFD    main_debugoff
  1995.         move.l    main_dataptr,a0
  1996.         tst.l    52(a0)            ; main_exitaddy
  1997.         beq.w    .continue
  1998.         move.l    52(a0),main_userpc    ; main_exitaddy
  1999.         bra.s    .exitint
  2000.     ENDIF
  2001.     IFND    main_debugoff
  2002.         st.b    main_configscreen    ; Set flag
  2003.         move.w    main_usersr,main_configsr; Save for later exit
  2004.         move.l    main_userpc,main_configpc; Save for later exit
  2005.         move.l    #main_config,main_userpc; Run config routine
  2006.         lea    main_registers,a0    ; Save...
  2007.         lea    main_configregs,a1
  2008.         moveq.l    #15,d0
  2009. .saveregloop:    move.l    (a0)+,(a1)+
  2010.         dbra    d0,.saveregloop        ;...registers
  2011.     ENDIF
  2012. .configint:    
  2013.     IFND    main_debugoff
  2014.         tst.w    main_contrace
  2015.         bne.s    .trace
  2016.         lea    main_configcop,a0
  2017.         lea    $dff000,a6
  2018. .conloop:    move.l    (a0)+,d0
  2019.         cmp.l    #-2,d0
  2020.         beq.s    .conexit
  2021.         move.w    d0,d1
  2022.         swap.w    d0
  2023.         move.w    d1,(a6,d0.w)
  2024.         bra.s    .conloop
  2025. .conexit:    bsr.w    main_mousemove
  2026.         addq.l    #1,main_concounter
  2027.         moveq.l    #0,d0
  2028.         moveq.l    #0,d1
  2029.         move.w    main_concurx,d0
  2030.         lsl.w    #3,d0
  2031.         move.w    main_concury,d1
  2032.         lsl.w    #4,d1
  2033.         add.w    #128*2,d0
  2034.         add.w    #$28*2+main_coninpwin*16,d1
  2035.         move.l    main_configscr,a0
  2036.         add.l    #20480+8+44,a0
  2037.         move.l    main_concounter,d2
  2038.         and.l    #$1f,d2
  2039.         and.l    #$10,d2
  2040.         beq.s    .skipblink
  2041.         moveq.l    #0,d0
  2042. .skipblink:    bsr.w    main_setspritepos
  2043.         bsr.w    kbd_kbdlevel3
  2044. .trace:
  2045.     ENDIF
  2046.         bra.w    .exitint        
  2047.  
  2048.     ENDIF    ; Main_DisableInt
  2049.  
  2050. *************************************************************************
  2051. * Configscreen related routines                        *
  2052. *************************************************************************
  2053.  
  2054. main_config:    
  2055.     IFND    main_debugoff
  2056.         move.l    a7,main_conoldsp
  2057.         tst.l    main_configscr            ; Screen alocated ?
  2058.         beq.s    main_conquit            ; Quit instead !!
  2059.         tst.w    main_contrace
  2060.         beq.s    .cont                ; Not tracing
  2061.         move.l    main_dataptr,a0
  2062.         tst.w    56(a0)                ; main_trappedvector
  2063.         bne.s    .cont                ; Tracing !!
  2064. .loop:        btst    #2,$dff016
  2065.         beq.s    .cont
  2066.         move.b    $bfec01,d0
  2067.         move.b    main_lastkey,d1
  2068.         move.b    d0,main_lastkey
  2069.         cmp.b    d0,d1
  2070.         bne.s    .cont
  2071.         btst    #6,$bfe001
  2072.         bne.s    .loop
  2073. .loop1:        btst    #6,$bfe001
  2074.         beq.s    .loop1
  2075.         bra.s    main_conexit
  2076. .cont:        clr.w    main_contrace
  2077.         bsr.w    kbd_flushbuffer
  2078.         bsr.w    main_consaveall            ; Save all
  2079.         bsr.w    main_concode
  2080.         bra.s    main_conexit            ; Exit
  2081. main_conquit:    move.l    main_dataptr,a0
  2082.         tst.l    52(a0)                ; Main_exitaddy
  2083.         beq.s    .skippqqq0
  2084.         move.l    #main_exit,52(a0)
  2085. .skippqqq0:    move.l    52(a0),main_configpc        ; Just exit
  2086. main_conexit:    move.l    main_dataptr,a0
  2087.         move.l    52(a0),d0            ; Main_exitaddy
  2088.         cmp.l    main_configpc,d0
  2089.         beq.s    .skippcfix
  2090.         move.w    56(a0),d0            ; main_trappedvector,d0
  2091.         lsl.w    #3,d0
  2092.         lea    main_vectorlist,a0
  2093.         move.l    4(a0,d0.w),d0
  2094.         add.l    d0,main_configpc
  2095.         move.l    main_dataptr,a0
  2096.         clr.w    56(a0)                ; main_trappedvector
  2097. .skippcfix:    move.l    main_conoldsp,a7
  2098.         bsr.w    main_conrestoreall
  2099.         st.b    main_configexit            ; Set exit flag
  2100.         move.b    $bfec01,main_lastkey
  2101. .sloop:        bra.s    .sloop
  2102.  
  2103. main_consaveall:lea    $dff000,a6            ; Custom base address
  2104.         move.w    #1,main_contrace
  2105. .waitvbl:    move.l    $04(a6),d0            ; Wait 4...
  2106.         and.l    #$1ff00,d0
  2107.         cmp.l    #301*256,d0
  2108.         bne.s    .waitvbl            ;...some frames
  2109. .waitvbl1:    move.l    $04(a6),d0            ; Wait 4...
  2110.         and.l    #$1ff00,d0
  2111.         cmp.l    #300*256,d0
  2112.         bne.s    .waitvbl1            ;...some frames
  2113.         move.w    $1e(a6),main_conintreq        ; Save intreq
  2114.         move.w    #$3fdf,$9c(a6)            ; Clear intreq
  2115.         move.w    $1c(a6),main_conintena        ; Save intena
  2116.         move.w    #$3fdf,$9a(a6)            ; Disable interrupts
  2117.         move.w    $02(a6),main_condmacon        ; Save dmacon
  2118.         move.w    #$7fff,$96(a6)            ; Clear dma
  2119.     IFND    main_skipsysinfo
  2120.         tst.w    main_aga
  2121.         beq.s    .skippa
  2122.         lea    $dff000,a6
  2123.         lea    main_concols,a0
  2124.         move.w    #$0100,$0104(a6)    ; Read Ram
  2125.         move.w    #$0000,$0106(a6)
  2126.         move.w    $180(a6),(a0)+
  2127.         move.w    $182(a6),(a0)+
  2128.         move.w    $1a2(a6),(a0)+
  2129.         move.w    $1a4(a6),(a0)+
  2130.         move.w    $1ba(a6),(a0)+
  2131.         move.w    $1bc(a6),(a0)+
  2132.         move.w    $1be(a6),(a0)
  2133.         move.w    #$0000,$0104(a6)
  2134.     ENDIF
  2135. .skippa:    clr.w    main_contrace
  2136.         move.w    #$8320,$96(a6)            ; Enable bpldma+Sprite
  2137.         move.l    main_vbrbase,a0
  2138.         move.l    $68(a0),kbd_oldlevel2
  2139.         move.l    #kbd_kbdlevel2,$68(a0)
  2140.         move.w    #$8008,$9a(a6)
  2141.         rts
  2142.  
  2143. main_conrestoreall:lea    $dff000,a6        ; Custom base address
  2144. .keyrel:    tst.b    kbd_keypressed
  2145.         bne.s    .keyrel
  2146.         move.w    #$3fdf,$9a(a6)        ; Disable all interrupts intena
  2147. .waitvbl2:    move.l    $04(a6),d0        ; Get Rast pos
  2148.         and.l    #$1ff00,d0        ; Mask out vertical bits
  2149.         cmp.l    #301*256,d0        ; Wait row
  2150.         bne.s    .waitvbl2        ; Not reached
  2151.         move.l    main_vbrbase,a0
  2152.         move.l    kbd_oldlevel2,$68(a0)
  2153.         or.w    #$c000,main_conintena    ; Set set bit
  2154.         or.w    #$8000,main_conintreq    ; Set set bit    
  2155.         or.w    #$8200,main_condmacon    ; Set set bit    
  2156. .waitvbl3:    move.l    $04(a6),d0        ; Get Rast pos
  2157.         and.l    #$1ff00,d0        ; Mask out vertical bits
  2158.         cmp.l    #300*256,d0        ; Wait row
  2159.         bne.s    .waitvbl3        ; Not reached
  2160.         move.w    main_conintena,$9a(a6)    ; Restore INTENA
  2161.         move.w    #$3fdf,$9c(a6)        ; Clear INTREQ
  2162.         move.w    main_conintreq,$9c(a6)    ; Restore INTREQ
  2163.         move.w    #$7fff,$96(a6)        ; Clear ALL DMA
  2164.         move.w    main_condmacon,$96(a6)    ; Restore DMA
  2165.     IFND    main_skipsysinfo
  2166.         tst.w    main_aga
  2167.         beq.s    .skippa
  2168.         lea    main_concols,a0
  2169.         move.w    #$0000,$0104(a6)
  2170.         move.w    #$0000,$0106(a6)
  2171.         move.w    (a0)+,$180(a6)
  2172.         move.w    (a0)+,$182(a6)
  2173.         move.w    (a0)+,$1a2(a6)
  2174.         move.w    (a0)+,$1a4(a6)
  2175.         move.w    (a0)+,$1ba(a6)
  2176.         move.w    (a0)+,$1bc(a6)
  2177.         move.w    (a0),$1be(a6)
  2178.     ENDIF
  2179. .skippa:    rts
  2180.  
  2181. main_coninpwin    =    6
  2182.  
  2183. main_conprintxy:;in:    d0,d1,a0=x,y,strptr
  2184.         move.w    d0,d6        
  2185.         move.w    d1,d7
  2186. .newpos:    move.w    d6,d0
  2187.         move.w    d7,d1
  2188.         add.w    #main_coninpwin,d1
  2189.         muls    #80*8,d1        ; Calc..
  2190.         add.l    main_configscr,d1
  2191.         move.l    d1,d2
  2192.         add.l    d0,d1
  2193.         move.l    d1,a1            ; ..Scrptr
  2194.         lea    main_font,a2        ; Font ptr
  2195.         moveq.l    #0,d0
  2196.         move.w    #$00ff,d1
  2197. .loop:        move.b    (a0)+,d0        ; Get char
  2198.         beq.w    .exit            ; Zero=End of text
  2199.         cmp.b    #10,d0
  2200.         bne.s    .skipsr
  2201.         moveq.l    #0,d6
  2202.         bra.w    .newpos
  2203. .skipsr:    cmp.b    #13,d0
  2204.         bne.s    .skiplf
  2205.         addq.l    #1,d7
  2206.         cmp.w    #28-main_coninpwin,d7
  2207.         blt.s    .noscroll
  2208.         moveq.l    #27-main_coninpwin,d7
  2209.         move.l    main_configscr,a5
  2210.         add.l    #8*80*main_coninpwin,a5
  2211.         move.l    a5,a4
  2212.         add.l    #8*80,a4
  2213.         movem.l    a0/d6-d7,-(a7)
  2214.         move.w    #2*(248-24-main_coninpwin*8)-1,d0
  2215.         moveq.l    #40,d1
  2216. .copyloop:    movem.l    (a4)+,d2-a3
  2217.         movem.l    d2-a3,(a5)
  2218.         add.l    d1,a5
  2219.         dbra    d0,.copyloop        
  2220.         moveq.l    #0,d1
  2221.         move.l    d1,d2
  2222.         move.l    d1,d3
  2223.         move.l    d1,d4
  2224.         move.l    d1,d5
  2225.         move.l    d1,d6
  2226.         move.l    d1,d7
  2227.         move.l    d1,a0
  2228.         move.l    d1,a1
  2229.         move.l    d1,a2
  2230.         move.w    #2*8-1,d0
  2231. .clrloop:    movem.l    d1-a2,-(a4)
  2232.         dbra    d0,.clrloop        
  2233.         movem.l    (a7)+,a0/d6-d7
  2234. .noscroll:    bra.w    .newpos
  2235. .skiplf:    addq.w    #1,d6
  2236.         and.w    d1,d0
  2237.         lsl.w    #3,d0
  2238.         move.b    1(a2,d0.l),1*80(a1)        
  2239.         move.b    2(a2,d0.l),2*80(a1)        
  2240.         move.b    3(a2,d0.l),3*80(a1)        
  2241.         move.b    4(a2,d0.l),4*80(a1)        
  2242.         move.b    5(a2,d0.l),5*80(a1)        
  2243.         move.b    6(a2,d0.l),6*80(a1)        
  2244.         move.b    7(a2,d0.l),7*80(a1)        
  2245.         move.b    (a2,d0.l),(a1)+
  2246.         bra.w    .loop
  2247. .exit:        move.w    d6,main_concurx
  2248.         move.w    d7,main_concury
  2249.         rts
  2250.  
  2251. main_conprint:    ;a0=Ptr to text
  2252.         moveq.l    #0,d0
  2253.         move.w    main_concurx,d0
  2254.         move.w    main_concury,d1
  2255.         bra.w    main_conprintxy
  2256.  
  2257. main_conprintdec:;in:    d0=Number
  2258.         lea    main_txtdec,a0
  2259.         move.l    a0,a1
  2260.         move.l    a1,a2
  2261.         moveq.l    #0,d1
  2262. .loop:        divu    #10,d0
  2263.         swap.w    d0
  2264.         add.b    #48,d0
  2265.         addq.l    #1,d1
  2266.         move.b    d0,(a2)+
  2267.         clr.w    d0
  2268.         swap.w    d0
  2269.         tst.l    d0
  2270.         bne.s    .loop
  2271. .ok:        move.b    #0,(a2)
  2272.         asr.w    #1,d1
  2273.         tst.w    d1
  2274.         beq.s    .skipp
  2275.         subq.w    #1,d1
  2276. .sloop:        move.b    (a1),d0
  2277.         move.b    -(a2),(a1)+
  2278.         move.b    d0,(a2)
  2279.         dbra    d1,.sloop
  2280. .skipp:        bra.w    main_conprint
  2281.  
  2282. main_conprinthex:;in:    d0=Number to print
  2283.         lea    main_contxthex+8,a0
  2284.         lea    main_conhexchars,a1
  2285.         moveq.l    #0,d1
  2286.         moveq.l    #7,d2
  2287. .loop:        move.b    d0,d1
  2288.         and.b    #$f,d1    
  2289.         move.b    (a1,d1.l),-(a0)
  2290.         lsr.l    #4,d0
  2291.         dbra    d2,.loop
  2292.         bra.w    main_conprint
  2293.  
  2294. main_conprinthex4:;in:    d0=Number to print
  2295.         lea    main_contxthex+8,a0
  2296.         lea    main_conhexchars,a1
  2297.         moveq.l    #0,d1
  2298.         moveq.l    #3,d2
  2299. .loop:        move.b    d0,d1
  2300.         and.b    #$f,d1    
  2301.         move.b    (a1,d1.l),-(a0)
  2302.         lsr.l    #4,d0
  2303.         dbra    d2,.loop
  2304.         bra.w    main_conprint
  2305.  
  2306. main_conlf:    lea    main_contxtlf,a0
  2307.         bra.w    main_conprint
  2308.  
  2309. main_concode:    move.l    main_concurx,-(a7)
  2310.         move.w    #2,main_concurx
  2311.         move.w    #-5,main_concury
  2312.         lea    main_contxt02,a0
  2313.         bsr.w    main_conprint
  2314.         lea    main_configregs,a5
  2315.         moveq.l    #7,d6
  2316. .regloop0:    move.l    (a5)+,d0
  2317.         movem.l    d6/a5,-(a7)
  2318.         bsr.w    main_conprinthex
  2319.         lea    main_contxt08,a0
  2320.         bsr.w    main_conprint
  2321.         movem.l    (a7)+,d6/a5
  2322.         dbra    d6,.regloop0
  2323.         bsr.w    main_conlf
  2324.         move.w    #2,main_concurx
  2325.         lea    main_contxt03,a0
  2326.         bsr.w    main_conprint
  2327.         moveq.l    #7,d6
  2328. .regloop1:    move.l    (a5)+,d0
  2329.         movem.l    d6/a5,-(a7)
  2330.         bsr.w    main_conprinthex
  2331.         lea    main_contxt08,a0
  2332.         bsr.w    main_conprint
  2333.         movem.l    (a7)+,d6/a5
  2334.         dbra    d6,.regloop1
  2335.         bsr.w    main_conlf
  2336.         move.w    #2,main_concurx
  2337.         lea    main_contxt01,a0
  2338.         bsr.w    main_conprint
  2339.         move.l    main_configpc,d0
  2340.         bsr.w    main_conprinthex
  2341.         lea    main_contxt06,a0
  2342.         bsr.w    main_conprint
  2343.         move.w    main_usersr,d0
  2344.         bsr.w    main_conprinthex4
  2345.         lea    main_contxt05,a0
  2346.         bsr.w    main_conprint
  2347.         move.w    main_condmacon,d0
  2348.         bsr.w    main_conprinthex4
  2349.         lea    main_contxt07,a0
  2350.         bsr.w    main_conprint
  2351.         move.w    main_conintena,d0
  2352.         bsr.w    main_conprinthex4
  2353.         lea    main_contxt09,a0
  2354.         bsr.w    main_conprint
  2355.         move.w    main_conintreq,d0
  2356.         bsr.w    main_conprinthex4
  2357.         move.w    #2,main_concurx
  2358.         addq.w    #1,main_concury
  2359.         lea    main_contxt20,a0
  2360.         bsr.w    main_conprint
  2361.         move.l    main_dataptr,a0
  2362.         move.w    56(a0),d0        ; main_trappedvector,d0
  2363.         lsl.w    #3,d0
  2364.         lea    main_vectorlist,a0
  2365.         move.l    (a0,d0.w),a0
  2366.         bsr.w    main_conprint
  2367.         move.l    (a7)+,main_concurx
  2368.         tst.w    main_confirst        
  2369.         bne.w    .skipsi;------------------------ Run first time only --
  2370.         move.w    #1,main_confirst
  2371.         moveq.l    #$5f,d0
  2372.         moveq.l    #0,d1
  2373.         move.l    #main_macro0,d2
  2374.         bsr.w    kbd_setmacro
  2375.         move.l    main_concurx,-(a7)
  2376.         lea    main_contxt16,a0
  2377.         move.w    #1,main_concurx
  2378.         move.w    #24,main_concury
  2379.         bsr.w    main_conprint
  2380.         move.l    (a7)+,main_concurx
  2381.         move.l    main_configscr,a0
  2382.         move.l    a0,a1
  2383.         add.l    #5*80,a1
  2384.         move.l    a1,a2
  2385.         add.l    #79,a2
  2386.         moveq.l    #3,d0
  2387.         move.b    #$c0,d1
  2388.         moveq.l    #80,d3
  2389.         moveq.l    #38,d2
  2390. .yloopq:    move.b    d1,(a1)
  2391.         move.b    d0,(a2)
  2392.         add.l    d3,a1
  2393.         add.l    d3,a2
  2394.         dbra    d2,.yloopq
  2395.         add.l    #236*80,a0
  2396.         move.b    #$c0,d0
  2397.         bsr.w    .drawline
  2398.         add.l    #17,a0
  2399.         moveq.l    #$01,d0
  2400.         bsr.w    .drawline
  2401.         addq.l    #1,a0
  2402.         move.b    #$80,d0
  2403.         bsr.w    .drawline
  2404.         add.l    #15,a0
  2405.         moveq.l    #$01,d0
  2406.         bsr.s    .drawline
  2407.         addq.l    #1,a0
  2408.         move.b    #$80,d0
  2409.         bsr.s    .drawline
  2410.         add.l    #12,a0
  2411.         moveq.l    #$01,d0
  2412.         bsr.s    .drawline
  2413.         addq.l    #1,a0
  2414.         move.b    #$80,d0
  2415.         bsr.s    .drawline
  2416.         add.l    #19,a0
  2417.         moveq.l    #$01,d0
  2418.         bsr.s    .drawline
  2419.         addq.l    #1,a0
  2420.         move.b    #$80,d0
  2421.         bsr.s    .drawline
  2422.         add.l    #12,a0
  2423.         moveq.l    #$03,d0
  2424.         bsr.s    .drawline
  2425.         move.l    main_configscr,a0
  2426.         move.l    a0,a3
  2427.         add.l    #4*80,a3
  2428.         add.l    #(5*8+4)*80,a0
  2429.         move.l    a0,a1
  2430.         add.l    #24*8*80,a1
  2431.         move.l    a1,a2
  2432.         add.l    #2*8*80,a2
  2433.         moveq.l    #-1,d0
  2434.         moveq.l    #19,d1
  2435. .dlineloop:    move.l    d0,(a0)+
  2436.         move.l    d0,(a1)+
  2437.         move.l    d0,(a2)+
  2438.         move.l    d0,(a3)+
  2439.         dbra    d1,.dlineloop
  2440.         lea    main_contxt00,a0
  2441.         bsr.w    main_conprint
  2442.         bsr.w    main_conprintsi
  2443.         bra.s    .skipsi
  2444. .drawline:    moveq.l    #15,d1
  2445.         move.l    a0,a1
  2446. .yloop0:    move.b    d0,(a1)
  2447.         add.l    #80,a1
  2448.         dbra    d1,.yloop0
  2449.         rts
  2450. .skipsi:    move.w    #0,main_concurx
  2451.         subq.w    #1,main_concury    
  2452. .nextcommand:    bsr.w    kbd_flushbuffer
  2453. ;------------------------------------------------------------- Input routine --
  2454.         lea    main_contxt04,a0
  2455.         bsr.w    main_conprint
  2456.         lea    main_inputbuffer,a0
  2457.         move.l    a0,a6
  2458.         bsr.w    main_conprint
  2459. .loop:        btst    #6,$bfe001
  2460.         bne.s    .nomouse
  2461.         move.w    main_mousezone,d0
  2462.         cmp.w    #-1,d0
  2463.         beq.s    .nomouse
  2464.         lsl.w    #2,d0
  2465.         lea    main_zonecodes,a0
  2466.         move.l    (a0,d0.w),a0
  2467. .mkrelloop:    btst    #6,$bfe001
  2468.         beq.s    .mkrelloop
  2469.         jsr    (a0)
  2470.         bra.s    .loop
  2471. .nomouse:    bsr.w    kbd_readkey
  2472.         tst.b    d0
  2473.         beq.s    .loop
  2474.         cmp.w    #32,d0
  2475.         blt.s    .special
  2476.         cmp.w    #128,d0
  2477.         blt.s    .ok
  2478.         cmp.w    #160,d0
  2479.         blt.s    .special
  2480. .ok:        move.w    main_inputlength,d1
  2481.         cmp.w    #79,d1
  2482.         bge.s    .loop
  2483.         move.b    d0,(a6,d1.w)
  2484.         clr.b    1(a6,d1.w)
  2485.         lea    main_contxt13,a0
  2486.         move.b    d0,(a0)
  2487.         bsr.w    main_conprint
  2488.         addq.w    #1,main_inputlength
  2489.         bra.s    .loop
  2490. .special:    cmp.b    #8,d0
  2491.         beq.s    .del
  2492.         cmp.b    #13,d0
  2493.         beq.s    .enter
  2494.         cmp.b    #27,d0
  2495.         beq.s    .esc
  2496.         bra.w    .loop
  2497. .esc:        clr.l    (a6)
  2498.         clr.w    main_inputlength
  2499.         move.w    #1,main_concurx
  2500.         lea    main_contxt15,a0
  2501.         bsr.w    main_conprint
  2502.         move.w    #1,main_concurx
  2503.         bra.w    .loop
  2504. .del:        tst.w    main_inputlength
  2505.         beq.w    .loop
  2506.         move.w    main_inputlength,d1
  2507.         subq.w    #1,d1
  2508.         move.b    #0,(a6,d1.w)
  2509.         move.w    d1,main_inputlength
  2510.         subq.w    #1,main_concurx
  2511.         lea    main_contxt13,a0
  2512.         move.b    #32,(a0)
  2513.         bsr.w    main_conprint
  2514.         subq.w    #1,main_concurx
  2515.         bra.w    .loop
  2516. .enter:        tst.w    main_inputlength
  2517.         beq.w    .nextcommand
  2518.         bsr.w    main_conlf
  2519.         lea    main_commandlist,a0
  2520. .cmdloop:    move.l    a6,a1
  2521.         tst.b    (a0)
  2522.         beq.w    .nocmdfound
  2523. .testloop:    move.b    (a0)+,d0
  2524.         move.b    (a1)+,d1
  2525.         cmp.b    #0,d0
  2526.         bne.s    .cont
  2527.         cmp.b    #0,d1
  2528.         beq.s    .foundcode
  2529.         cmp.b    #32,d1
  2530.         beq.s    .foundcode    
  2531.         bra.s    .nextcode
  2532. .cont:        cmp.b    d0,d1
  2533.         beq.s    .testloop
  2534. .moreloop:    tst.b    (a0)+
  2535.         bne.s    .moreloop        
  2536. .nextcode:    addq.l    #4,a0
  2537.         move.l    a0,d0
  2538.         and.b    #$1,d0
  2539.         beq.s    .cmdloop
  2540.         addq.l    #1,a0
  2541.         bra.s    .cmdloop
  2542. .foundcode:    move.l    a0,d0
  2543.         and.b    #$1,d0
  2544.         beq.s    .skipeven
  2545.         addq.l    #1,a0
  2546. .skipeven:    move.l    (a0)+,a0
  2547.         clr.l    (a6)
  2548.         move.w    #0,main_inputlength
  2549. .keyrelloop:    tst.b    kbd_keypressed
  2550.         bne.s    .keyrelloop        
  2551.         jsr    (a0)
  2552.         bra.w    .nextcommand
  2553. .nocmdfound:    lea    main_contxt14,a0
  2554.         bsr.w    main_conprint
  2555.         clr.l    (a6)
  2556.         move.w    #0,main_inputlength
  2557.         bra.w    .nextcommand        
  2558. .exitcon:    rts
  2559.  
  2560. main_cmdtest:    movem.l    d0-a6,-(a7)
  2561.         lea    main_contxt18,a0
  2562.         bsr.w    main_conprint
  2563.         lea    test,a1
  2564.         moveq.l    #7,d1
  2565. .loop0:        move.l    (a1)+,d0
  2566.         movem.l    d1/a1,-(a7)
  2567.         bsr.w    main_conprinthex
  2568.         lea    main_contxt08,a0
  2569.         bsr.w    main_conprint
  2570.         movem.l    (a7)+,d1/a1
  2571.         dbra    d1,.loop0
  2572.         lea    main_contxt19,a0
  2573.         bsr.w    main_conprint
  2574.         lea    test+4*8,a1
  2575.         moveq.l    #7,d1
  2576. .loop1:        move.l    (a1)+,d0
  2577.         movem.l    d1/a1,-(a7)
  2578.         bsr.w    main_conprinthex
  2579.         lea    main_contxt08,a0
  2580.         bsr.w    main_conprint
  2581.         movem.l    (a7)+,d1/a1
  2582.         dbra    d1,.loop1
  2583.         bsr.w    main_conlf
  2584.         bsr.w    main_conlf
  2585.         lea    main_contxt10,a0
  2586.         bsr.w    main_conprint
  2587.         move.l    main_dataptr,a0
  2588.         move.l    8(a0),d0        ; Get timer
  2589.         bsr.w    main_conprinthex
  2590.         lea    main_contxt11,a0
  2591.         bsr.w    main_conprint
  2592.         move.l    main_dataptr,a0
  2593.         move.l    4(a0),d0        ; Get counter
  2594.         bsr.w    main_conprinthex
  2595.         lea    main_contxt12,a0
  2596.         bsr.w    main_conprint
  2597.         move.l    main_dataptr,a0
  2598.         move.l    (a0),d0
  2599.         bsr.w    main_conprinthex
  2600.         bsr.w    main_conlf
  2601.         movem.l    (a7)+,d0-a6
  2602.         rts
  2603.  
  2604. main_cmdcont:    move.l    #.exit,(a7)
  2605. .exit:        rts
  2606.  
  2607. main_cmdtrace:    move.w    #-1,main_contrace
  2608.         move.l    #.exit,(a7)
  2609. .exit:        rts
  2610.  
  2611. main_cmdexit:    move.l    #.exit,(a7)
  2612.         move.l    a0,-(a7)
  2613.         move.l    main_dataptr,a0
  2614.         move.l    52(a0),main_configpc    ; Just exit main_exitaddy
  2615.         move.l    (a7)+,a0
  2616. .exit:        rts
  2617.  
  2618. main_cmdview:    movem.l    d0-a6,-(a7)
  2619.         bsr.w    main_conrestoreall        
  2620.         st.b    main_novbl
  2621.         move.b    $bfec01,main_lastkey
  2622. .loop:        move.b    $bfec01,d0
  2623.         move.b    main_lastkey,d1
  2624.         move.b    d0,main_lastkey
  2625.         cmp.b    d0,d1
  2626.         bne.s    .exit
  2627.         btst    #2,$dff016
  2628.         beq.s    .exit
  2629.         btst    #6,$bfe001
  2630.         bne.s    .loop
  2631. .exit:        btst    #6,$bfe001
  2632.         beq.s    .exit
  2633.         bsr.w    main_consaveall        
  2634.         clr.w    main_novbl
  2635.         bsr.w    kbd_flushbuffer
  2636.         movem.l    (a7)+,d0-a6
  2637.         rts
  2638.  
  2639. main_cmdhelp:    movem.l    d0-a6,-(a7)
  2640.         lea    main_contxt17,a0
  2641.         bsr.w    main_conprint
  2642.         movem.l    (a7)+,d0-a6
  2643.         rts
  2644.  
  2645.  
  2646. main_cmdmeteron:movem.l    d0-a6,-(a7)
  2647.     IFND    main_meteroff
  2648.         bsr.w    main_framemeteron
  2649.     ENDIF
  2650.         movem.l    (a7)+,d0-a6
  2651.         rts
  2652.  
  2653. main_cmdmeteroff:movem.l    d0-a6,-(a7)
  2654.     IFND    main_meteroff
  2655.         bsr.w    main_framemeteroff
  2656.     ENDIF
  2657.         movem.l    (a7)+,d0-a6
  2658.         rts
  2659.  
  2660. main_cmddi:    movem.l    d0-a6,-(a7)
  2661.         lea    main_contxt00,a0
  2662.         bsr.w    main_conprint
  2663.         movem.l    (a7)+,d0-a6
  2664.         rts
  2665.  
  2666. main_cmdhelp2:    movem.l    d0-a6,-(a7)
  2667. .loop:        btst    #6,$bfe001
  2668.         beq.s    .loop
  2669.         lea    main_macro0,a5
  2670. .cpkloop:    move.b    (a5)+,d0
  2671.         beq.s    .exitikloop
  2672.         bsr.w    kbd_insertkey
  2673.         bra.s    .cpkloop
  2674. .exitikloop:    movem.l    (a7)+,d0-a6
  2675.         rts
  2676.  
  2677. main_cmdscop:    movem.l    d0-a6,-(a7)
  2678.     IFND    main_skipsysinfo
  2679.         lea    main_copfound,a2
  2680.         lea    main_coptext00,a0
  2681.         bsr.w    main_conprint
  2682.         move.l    main_copaddy,d0
  2683.         addq.l    #4,d0
  2684.         and.l    #-2,d0
  2685.         move.l    d0,a0
  2686.         moveq.l    #0,d2
  2687.         move.l    main_chipmem,d0
  2688. .searchloop0:    move.w    (a0),d1
  2689.         move.l    d2,(a2)
  2690.         addq.l    #2,a0
  2691.         cmp.l    a0,d0
  2692.         beq.w    .notfound
  2693.         cmp.w    main_copins0,d1
  2694.         bne.s    .searchloop0
  2695.         move.l    a0,a1
  2696.         subq.l    #2,a1
  2697.         move.l    a1,main_copaddy
  2698. .searchloop1:    move.w    (a1),d1
  2699.         subq.l    #4,a1
  2700.         cmp.l    #0,a1
  2701.         blt.s    .searchloop0
  2702.         btst    #0,d1
  2703.         bne.s    .searchloop1
  2704.         cmp.w    #$040,d1
  2705.         blo.s    .oktop
  2706.         cmp.w    #$1fe,d1
  2707.         bls.s    .searchloop1
  2708. .oktop:        addq.l    #8,a1
  2709.         move.l    a1,main_copfound
  2710. .searchloop2:    move.w    (a1),d1
  2711.         addq.l    #4,a1
  2712.         cmp.l    d0,a1
  2713.         beq.s    .notfound
  2714.         cmp.w    main_copins1,d1
  2715.         beq.s    .foundcopper
  2716.         btst    #0,d1
  2717.         bne.s    .searchloop2
  2718.         cmp.w    #$040,d1
  2719.         blo.s    .searchloop0
  2720.         cmp.w    #$1fe,d1
  2721.         bhi.w    .searchloop0
  2722.         bra.s    .searchloop2
  2723. .foundcopper:    lea    main_coptext01,a0
  2724.         bsr.w    main_conprint
  2725.         move.l    main_copfound,d0
  2726.         bsr.w    main_conprinthex
  2727.         bra.s    .found
  2728. .notfound:    move.l    d2,(a2)
  2729.         lea    main_coptext02,a0
  2730.         bsr.w    main_conprint
  2731. .found:        bsr.w    main_conlf
  2732.     ENDIF
  2733.         movem.l    (a7)+,d0-a6
  2734.         rts
  2735.  
  2736. main_cmdcopadd:    movem.l    d0-a6,-(a7)
  2737.         move.l    main_copfound,d0
  2738.         beq.s    .nocop
  2739.         addq.l    #4,d0
  2740.         move.l    d0,main_copfound
  2741.         move.l    d0,-(a7)
  2742.         lea    main_coptext03,a0
  2743.         bsr.w    main_conprint
  2744.         move.l    (a7)+,d0
  2745.         bsr.w    main_conprinthex
  2746.         bra.s    .exit
  2747. .nocop:        lea    main_coptext04,a0
  2748.         bsr.w    main_conprint
  2749. .exit:        bsr.w    main_conlf
  2750.         movem.l    (a7)+,d0-a6
  2751.         rts
  2752.  
  2753. main_cmdcopsub:    movem.l    d0-a6,-(a7)
  2754.         move.l    main_copfound,d0
  2755.         beq.s    .nocop
  2756.         subq.l    #4,d0
  2757.         move.l    d0,main_copfound
  2758.         move.l    d0,-(a7)
  2759.         lea    main_coptext03,a0
  2760.         bsr.w    main_conprint
  2761.         move.l    (a7)+,d0
  2762.         bsr.w    main_conprinthex
  2763.         bra.s    .exit
  2764. .nocop:        lea    main_coptext04,a0
  2765.         bsr.w    main_conprint
  2766. .exit:        bsr.w    main_conlf
  2767.         movem.l    (a7)+,d0-a6
  2768.         rts
  2769.  
  2770. main_cmdcopview:movem.l    d0-a6,-(a7)
  2771.         move.l    main_copfound,d0
  2772.         beq.s    .nocop
  2773.         move.l    d0,-(a7)
  2774.         lea    main_coptext03,a0
  2775.         bsr.w    main_conprint
  2776.         move.l    (a7),d0
  2777.         bsr.w    main_conprinthex
  2778.         move.l    (a7)+,d0
  2779.         move.l    d0,a6
  2780.         moveq.l    #7,d0
  2781. .loop:        move.l    d0,-(a7)
  2782.         move.l    a6,d0
  2783.         bsr.w    main_conprinthex
  2784.         lea    main_coptext05,a0
  2785.         bsr.w    main_conprint
  2786.         moveq.l    #0,d0
  2787.         move.w    (a6)+,d0
  2788.         bsr.w    main_conprinthex4
  2789.         lea    main_coptext06,a0
  2790.         bsr.w    main_conprint
  2791.         moveq.l    #0,d0
  2792.         move.w    (a6)+,d0
  2793.         bsr.w    main_conprinthex4
  2794.         bsr.w    main_conlf
  2795.         move.l    (a7)+,d0
  2796.         dbra    d0,.loop
  2797.         bra.s    .exit
  2798. .nocop:        lea    main_coptext04,a0
  2799.         bsr.w    main_conprint
  2800. .exit:        bsr.w    main_conlf
  2801.         movem.l    (a7)+,d0-a6
  2802.         rts
  2803.  
  2804.  
  2805. main_copaddy:    dc.l    0
  2806. main_copfound:    dc.l    0
  2807. main_copins0:    dc.w    $0100
  2808. main_copins1:    dc.w    $ffff
  2809.  
  2810. main_coptext00:    dc.b    10,13,'Searching for copper list ...',0
  2811. main_coptext01:    dc.b    'Found at: $',0
  2812. main_coptext02:    dc.b    'Not found !!',0
  2813. main_coptext03:    dc.b    10,13,'Copper at: $',0
  2814. main_coptext04:    dc.b    10,13,'No copper in memory !!',0
  2815. main_coptext05:    dc.b    ':   dc.w    $',0
  2816. main_coptext06:    dc.b    ',$',0
  2817.         even
  2818.  
  2819. main_conprintsi:
  2820.     IFND    main_sysinfooff
  2821.         lea    main_txtpower,a0
  2822.         bsr.w    main_conprint
  2823.         move.l    main_powptr,a0
  2824.         bsr.w    main_conprint
  2825.         lea    main_txtproc,a0
  2826.         bsr.w    main_conprint
  2827.         move.l    main_procptr,a0
  2828.         bsr.w    main_conprint
  2829.         lea    main_txtcoproc,a0
  2830.         bsr.w    main_conprint
  2831.         move.l    main_coprocptr,a0
  2832.         bsr.w    main_conprint
  2833.         lea    main_txtmmu,a0
  2834.         bsr.w    main_conprint
  2835.         move.l    main_mmuptr,a0
  2836.         bsr.w    main_conprint
  2837.         lea    main_txtaga,a0
  2838.         bsr.w    main_conprint
  2839.         move.l    main_gfxptr,a0
  2840.         bsr.w    main_conprint
  2841.         lea    main_txtvbl,a0
  2842.         bsr.w    main_conprint
  2843.         move.l    main_refreshptr,a0
  2844.         bsr.w    main_conprint
  2845.         lea    main_txtmemchip,a0
  2846.         bsr.w    main_conprint
  2847.         move.l    main_chipmem,d0
  2848.         lsr.l    #8,d0
  2849.         lsr.l    #2,d0
  2850.         bsr.w    main_conprintdec
  2851.         lea    main_txtmemfast,a0
  2852.         bsr.w    main_conprint
  2853.         move.l    main_fastmem,d0
  2854.         lsr.l    #8,d0
  2855.         lsr.l    #2,d0
  2856.         bsr.w    main_conprintdec
  2857.         lea    main_txtkblf,a0
  2858.         bsr.w    main_conprint
  2859.     ENDIF
  2860.         rts
  2861.  
  2862. main_mousemove:    move.w    $dff00a,d0
  2863.         move.w    main_mouseold,d1
  2864.         move.w    d0,main_mouseold
  2865.         move.w    d0,d2
  2866.         move.w    d1,d3
  2867.         and.w    #$ff,d0
  2868.         and.w    #$ff,d1
  2869.         lsr.w    #8,d2
  2870.         lsr.w    #8,d3
  2871.         sub.b    d0,d1
  2872.         sub.b    d2,d3
  2873.         ext.w    d1
  2874.         ext.w    d3
  2875.         neg.w    d1
  2876.         neg.w    d3
  2877.         move.w    main_mousex,d4
  2878.         move.w    main_mousey,d5
  2879.         add.w    d1,d4
  2880.         add.w    d3,d5
  2881.         cmp.w    #0,d4
  2882.         bge.s    .okx0
  2883.         moveq.l    #0,d4
  2884. .okx0:        cmp.w    main_mousewidth,d4
  2885.         ble.s    .okx1
  2886.         move.w    main_mousewidth,d4
  2887. .okx1:        cmp.w    #0,d5
  2888.         bge.s    .oky0
  2889.         moveq.l    #0,d5
  2890. .oky0:        cmp.w    main_mouseheight,d5
  2891.         ble.s    .oky1
  2892.         move.w    main_mouseheight,d5
  2893. .oky1:        move.w    d4,main_mousex
  2894.         move.w    d5,main_mousey
  2895.         move.w    d4,d0
  2896.         move.w    d5,d1
  2897.         moveq.l    #8,d2
  2898.         sub.w    main_mousesprx,d0
  2899.         sub.w    main_mousespry,d1
  2900.         add.w    main_mouseorgx,d0
  2901.         add.w    main_mouseorgy,d1
  2902.         move.l    main_mousesprptr,d2
  2903.         beq.s    .skipspr
  2904.         move.l    d2,a0
  2905.         bsr.w    main_setspritepos
  2906. .skipspr:    move.w    main_mousex,d0
  2907.         move.w    main_mousey,d1
  2908.         moveq.l    #-1,d2
  2909.         move.l    d2,d7
  2910.         lea    main_mousezones,a0
  2911. .mzloop:    addq.w    #1,d2
  2912.         movem.w    (a0)+,d3-d6        ; Get X0
  2913.         move.l    (a0)+,a1
  2914.         cmp.w    #-1,d3
  2915.         beq.s    .exit
  2916.         cmp.w    d0,d3
  2917.         bgt.s    .mzloop
  2918.         cmp.w    d1,d4
  2919.         bgt.s    .mzloop
  2920.         cmp.w    d0,d5
  2921.         blt.s    .mzloop
  2922.         cmp.w    d1,d6
  2923.         blt.s    .mzloop
  2924.         move.w    d2,d7
  2925.         cmp.l    #0,a1
  2926.         beq.s    .skip
  2927.         movem.l    d0-a6,-(a7)
  2928.         jsr    (a1)
  2929.         movem.l    (a7)+,d0-a6
  2930. .skip:        bra.s    .mzloop
  2931. .exit:        move.w    d7,main_mousezone
  2932.         rts
  2933.  
  2934. main_setspritepos:;in:    a0,d0,d1=Sprite ptr,Xpos,Ypos
  2935.         moveq.l    #0,d2
  2936.         move.b    2(a0),d2
  2937.         moveq.l    #0,d3
  2938.         move.b    (a0),d3
  2939.         sub.w    d3,d2
  2940.         bge.s    .heightok
  2941.         add.w    #$100,d2        
  2942. .heightok:    moveq.l    #0,d3        ; Ctrl byte
  2943.         move.w    d0,d4
  2944.         asr.w    #1,d0
  2945.         btst    #0,d4
  2946.         beq.s    .noctrl3
  2947.         or.w    #%10000,d3    ; AGA...
  2948. .noctrl3:    asr.w    #1,d1
  2949.         move.w    d1,d4
  2950.         and.w    #$ff,d4        
  2951.         move.b    d4,(a0)
  2952.         btst    #8,d1
  2953.         beq.s    .noctrl0
  2954.         or.w    #%100,d3
  2955. .noctrl0:    add.w    d2,d1
  2956.         move.w    d1,d4
  2957.         and.w    #$ff,d4        
  2958.         move.b    d4,2(a0)
  2959.         btst    #8,d1
  2960.         beq.s    .noctrl1
  2961.         or.w    #%10,d3
  2962. .noctrl1:    move.w    d0,d1
  2963.         lsr.w    #1,d0
  2964.         move.b    d0,1(a0)
  2965.         btst    #0,d1
  2966.         beq.s    .noctrl2
  2967.         or.w    #%1,d3
  2968. .noctrl2:    move.b    d3,3(a0)
  2969.         rts
  2970.         
  2971. *************************************************************************
  2972. * Non OS readkeyboard routine by Equalizer/TBL (Hints from Sag)     *
  2973. * With:    - keymap translation (Raw to ASCII, Keyboard definer in AMOS)    *
  2974. *    - keyboard buffering (255 chars)                *
  2975. *    - keyboard repetition                        *
  2976. *************************************************************************
  2977.  
  2978. kbd_shift    =    $01
  2979. kbd_ctrl    =    $02
  2980. kbd_alt        =    $04
  2981. kbd_lamiga    =    $08
  2982. kbd_ramiga    =    $10
  2983.  
  2984. ;------------------------------------------------------- KeyBoard interrupts --
  2985.  
  2986. kbd_kbdlevel3:;------------------------------------- Level 3 (VBL) interrupt --
  2987.         tst.b    kbd_keypressed
  2988.         beq.s    .rts
  2989.         move.w    kbd_repttimerw,d0
  2990.         bne.s    .wait
  2991.         move.w    kbd_repttimers,d0
  2992.         bne.s    .waitspeed
  2993.         move.w    kbd_reptspeed,kbd_repttimers
  2994.         move.w    kbd_asciikey,d0
  2995.         bsr.w    kbd_insertkey
  2996.         bra.s    .rts
  2997. .waitspeed:    subq.w    #1,d0
  2998.         move.w    d0,kbd_repttimers
  2999.         bra.s    .rts
  3000. .wait:        subq.w    #1,d0
  3001.         move.w    d0,kbd_repttimerw
  3002. .rts:        rts
  3003.  
  3004. kbd_kbdlevel2:    movem.l    d0-a6,-(a7) ;--------------------- Level 2 interrupt --
  3005.         btst    #3,$bfed01
  3006.         beq    .quit
  3007.         move.b    $bfec01,d0
  3008.         move.b    d0,kbd_realraw
  3009.         move.b    #0,kbd_keypressed
  3010.         move.w    kbd_reptwait,kbd_repttimerw
  3011.         move.w    kbd_reptspeed,kbd_repttimers
  3012.         btst    #0,d0
  3013.         beq.s    .skippa
  3014.         move.b    #1,kbd_keypressed
  3015. .skippa:    neg.b    d0
  3016.         add.b    #$ff,d0
  3017.         ror.b    #1,d0
  3018.         and.w    #$ff,d0
  3019.         move.b    d0,kbd_rawkey
  3020. .skip:        lea    kbd_flagcodes,a0
  3021.         moveq.l    #7,d1        
  3022. .cloop:        cmp.b    (a0)+,d0
  3023.         bne.s    .noflagset
  3024.         bset.b    d1,kbd_realflags        ; Set flag bit
  3025. .noflagset:    cmp.b    8-1(a0),d0
  3026.         bne.s    .noflagsclr
  3027.         bclr.b    d1,kbd_realflags        ; Clear flag bit
  3028. .noflagsclr:    dbra    d1,.cloop
  3029. .noflag:    lea    $dff006,a6
  3030.         bsr    .waitrow
  3031.         bset    #6,$bfee01
  3032.         bsr    .waitrow
  3033.         move.b    #0,$bfec01
  3034.         bsr    .waitrow
  3035.         bclr    #6,$bfee01
  3036.         bsr    .waitrow
  3037. ;-------------------------------------------------------- Raw to asciibuffer --
  3038.         moveq.l    #0,d3
  3039.         move.b    kbd_rawkey,d3
  3040.         cmp.w    #128,d3
  3041.         bge.w    .exit            ; Strange rawcode?
  3042.         cmp.w    #0,d3
  3043.         beq.w    .exit
  3044.         moveq.l    #0,d1            ; Flags.
  3045.         moveq.l    #0,d2
  3046.         move.b    kbd_realflags,d2    ; KeyB Flags
  3047.         btst    #0,d2            ; Caps
  3048.         beq.s    .skip0
  3049.         or.b    #$1,d1
  3050. .skip0:        btst    #1,d2            ; Ctrl
  3051.         beq.s    .skip1
  3052.         or.b    #$2,d1
  3053. .skip1:        btst    #2,d2            ; LShift
  3054.         beq.s    .skip2
  3055.         or.b    #$1,d1
  3056. .skip2:        btst    #3,d2            ; LAlt
  3057.         beq.s    .skip3
  3058.         or.b    #$4,d1            
  3059. .skip3:        btst    #4,d2            ; LAmiga
  3060.         beq.s    .skip4
  3061.         or.b    #$8,d1            
  3062. .skip4:        btst    #5,d2            ; RAmiga
  3063.         beq.s    .skip5
  3064.         or.b    #$10,d1            
  3065. .skip5:        btst    #6,d2            ; RAlt
  3066.         beq.s    .skip6
  3067.         or.b    #$4,d1            
  3068. .skip6:        btst    #7,d2            ; RShift
  3069.         beq.s    .skip7
  3070.         or.b    #$1,d1            
  3071. .skip7:        move.b    d1,kbd_flags
  3072.         lsl.w    #7,d1
  3073.         add.w    d3,d1
  3074.         lsl.l    #1,d1
  3075.         add.l    kbd_keymapptr,d1
  3076.         move.l    kbd_keymapptr,d7
  3077.         bne.s    .qqq
  3078.         add.l    #kbd_keydefault,d1
  3079. .qqq:        move.l    d1,a1
  3080.         move.w    (a1),d2
  3081.         move.w    d2,kbd_asciikey
  3082.         move.w    d2,d0
  3083.         bsr.w    kbd_insertkey
  3084. .exit:        move.l    kbd_customptr,d0
  3085.         beq.s    .quit
  3086.         move.l    d0,a0
  3087.         jsr    (a0)
  3088. .quit:        move.w    #$0008,$dff09c
  3089.         movem.l    (a7)+,d0-a6
  3090.         rte
  3091. .waitrow:    move.b    (a6),d0
  3092.         addq.w    #2,d0
  3093. .loop:        cmp.b    (a6),d0
  3094.         bne.s    .loop
  3095.          rts
  3096. ;----------------------------------------------------- Ascii buffer routines --
  3097.  
  3098. *************************************************************************
  3099. kbd_setascii:    ; Changes an ascii value for a special RAW code        *
  3100. *        in:    d0.w,d1.w,d2.w=Raw value,Flags,New ASCII    *
  3101. *************************************************************************
  3102.         move.l    kbd_keymapptr,d3
  3103.         bne.s    .skip
  3104.         move.l    #kbd_keydefault,d3
  3105. .skip:        move.l    d3,a0
  3106.         and.l    #$1f,d1
  3107.         lsl.w    #7,d1
  3108.         add.w    d0,d1
  3109.         lsl.l    #1,d1
  3110.         and.w    #$ff,d2
  3111.         move.w    d2,(a0,d1.l)
  3112.         rts
  3113.  
  3114. *************************************************************************
  3115. kbd_setmacro:;     Sets a macro for a special RAW code            *
  3116. *        in:    d0.w,d1.w,d2.l=Raw value,Flags,String ptr     *
  3117. *************************************************************************
  3118.         move.l    kbd_keymapptr,d3
  3119.         bne.s    .skip
  3120.         move.l    #kbd_keydefault,d3
  3121. .skip:        move.l    d3,a0
  3122.         and.l    #$1f,d1
  3123.         lsl.w    #7,d1
  3124.         add.w    d0,d1
  3125.         move.w    d1,d3
  3126.         or.w    #$8000,d3
  3127.         lsl.l    #1,d1
  3128.         move.w    d3,(a0,d1.l)
  3129.         lsl.l    #1,d1
  3130.         move.l    kbd_macroptr,d3
  3131.         beq.s    .skip1
  3132.         move.l    d3,a0
  3133.         move.l    d2,(a0,d1.l)
  3134. .skip1:        rts
  3135.  
  3136. *************************************************************************
  3137. kbd_setcode:;     Sets a code for a special RAW code            *
  3138. *        in:    d0.w,d1.w,d2.l=Raw value,Flags,Code ptr     *
  3139. *************************************************************************
  3140.         or.l    #$80000000,d2        ; Special codeptr
  3141.         bra.s    kbd_setmacro
  3142.  
  3143.  
  3144. *************************************************************************
  3145. kbd_insertkey:    ;Inserts an ASCII-code into the keyboard buffer        *
  3146. *        in:    d0=ASCII-code                    *
  3147. *************************************************************************
  3148.         move.w    d0,d2
  3149. .inkey:        lea    kbd_buffer,a0
  3150.         moveq.l    #0,d0
  3151.         moveq.l    #0,d1
  3152.         move.b    (a0)+,d0        ; d0=head ptr
  3153.         move.b    (a0)+,d1        ; d1=tail ptr
  3154.         addq.w    #2,d0
  3155.         andi.w    #$ff,d0
  3156.         cmp.w    d0,d1            ; head=tail=full !!
  3157.         beq.w    .exit
  3158.         subq.w    #1,d0
  3159.         andi.w    #$ff,d0
  3160.         move.b    d0,-2(a0)        ; Save new head
  3161.         lsl.w    #1,d0
  3162.         move.w    d2,(a0,d0.w)
  3163. .exit:        rts
  3164.  
  3165. *************************************************************************
  3166. kbd_readkey:    ; Reads an ASCII-code form keyboard buffer        *
  3167. *        Out:    d0=ASCII-code    (0=No key)            *
  3168. *************************************************************************
  3169.         movem.l    d1-a6,-(a7)
  3170. .next:        moveq.l    #0,d0    
  3171.         tst.b    kbd_macroread
  3172.         bne.s    .domacro
  3173.         lea    kbd_buffer,a0
  3174.         move.b    (a0)+,d1
  3175.         move.b    (a0)+,d2
  3176.         cmp.b    d1,d2
  3177.         beq.s    .rts            ; Equal=Empty
  3178.         addq.w    #1,d2
  3179.         and.w    #$ff,d2
  3180.         move.b    d2,-1(a0)
  3181.         lsl.w    #1,d2
  3182.         move.w    (a0,d2.w),d0
  3183.         move.w    d0,d2
  3184.         and.w    #$3fff,d0
  3185.         lsr.w    #8,d2
  3186.         lsr.w    #6,d2
  3187.         cmp.w    #%10,d2        
  3188.         beq.s    .fixmacro
  3189.         and.w    #$ff,d0
  3190. .rts:        movem.l    (a7)+,d1-a6
  3191.         rts
  3192. .fixmacro:    move.w    d0,d2
  3193.         and.l    #$3fff,d2
  3194.         move.l    kbd_macroptr,d1
  3195.         beq.s    .skipmacall
  3196.         lsl.l    #2,d2
  3197.         move.l    d1,a0
  3198.         move.l    (a0,d2.l),d1
  3199.         beq.s    .rts
  3200.         btst    #31,d1
  3201.         bne.s    .codemacro
  3202.         move.l    d1,kbd_macropos
  3203. .domacro:    move.l    kbd_macropos,a0
  3204.         clr.b    kbd_macroread
  3205.         moveq.l    #0,d0
  3206.         move.b    (a0)+,d0
  3207.         beq.w    .next
  3208.         st.b    kbd_macroread
  3209.         move.l    a0,kbd_macropos
  3210.         bra.s    .rts
  3211. .codemacro:    and.l    #$7fffffff,d1
  3212.         move.l    d1,a5
  3213.         movem.l    d0-a6,-(a7)
  3214.         jsr    (a5)
  3215.         movem.l    (a7)+,d0-a6
  3216. .skipmacall:    bra.w    .next
  3217.  
  3218. *************************************************************************
  3219. kbd_flushbuffer:    ; Clears keyboard buffer            *
  3220. *************************************************************************
  3221.         move.b    kbd_buffer,kbd_buffer+1    
  3222.         rts
  3223.  
  3224. *****************************************************************
  3225. * RAW-Code for some special function keys.            *
  3226. *    help    $5f                        *
  3227. *    up      $4c                        *
  3228. *    down    $4d                        *
  3229. *    left    $4f                        *
  3230. *    right   $4e                        *
  3231. *    return  $44                        *
  3232. *    space   $40                        *
  3233. *    esc     $45                        *
  3234. *    enter   $43                        *
  3235. *    tab     $42                        *
  3236. *****************************************************************
  3237.  
  3238.     ENDIF
  3239.  
  3240.  
  3241. main_play:    dc.w    0
  3242.  
  3243. *************************************************************************
  3244. * Configuration related data                        *
  3245. *************************************************************************
  3246.  
  3247.     IFND    main_meteroff
  3248.     IFND    main_debugoff
  3249.     
  3250. main_framemeteron:
  3251.         move.l    main_configscr,d0
  3252.         beq.w    .exit
  3253.         tst.w    .first
  3254.         bne.s    .skip
  3255.         st.b    .first
  3256.         move.w    $dff002,main_framedma
  3257.         and.w    #%100000,main_framedma
  3258.         move.l    d0,a0
  3259.         add.l    #20480+1024,a0
  3260.         move.l    #$28d82802,(a0)+
  3261. ;-------------------------------------- Sprite 6 --
  3262.         move.w    #255,d0
  3263.         move.l    #$ffff0000,d1
  3264. .fillloop:    move.l    d1,(a0)+
  3265.         dbra    d0,.fillloop
  3266.         clr.l    (a0)+        
  3267. ;-------------------------------------- Sprite 7 --
  3268.         move.l    #$28d82802,(a0)+
  3269.         lea    main_framesprite,a1
  3270.         move.w    #1024/4-1,d0
  3271. .copyloop:    move.l    (a1)+,(a0)+
  3272.         dbra    d0,.copyloop
  3273.         clr.l    (a0)
  3274.         lea    $dff000,a6
  3275. .sync:        cmp.b    #$ff,$dff006
  3276.         bne.s    .sync
  3277.  
  3278.         move.w    #$e002,$106(a6)
  3279.         move.w    #$0f0,$1ba(a6)
  3280.         move.w    #$003,$1bc(a6)
  3281.         move.w    #$fff,$1be(a6)
  3282. .skip:        st.b    main_frameon
  3283. .exit:        rts
  3284. .first:        dc.w    0
  3285.  
  3286. main_framemeteroff:
  3287.         tst.w    main_framedma
  3288.         bne.s    .skip
  3289.         move.w    #%100000,$dff096
  3290. .skip:        clr.w    main_frameon
  3291.         rts
  3292.  
  3293. main_framedma:    dc.w    0
  3294. main_frameon:    dc.w    0
  3295.  
  3296.  
  3297. main_frameint:    tst.w    main_frameon
  3298.         beq.w    .exit
  3299.         lea    $dff000,a6
  3300.         move.w    #$8200!%100000,$96(a6)
  3301.         move.w    #$e002,$106(a6)
  3302.         move.l    #$0f00003,$1ba(a6)
  3303.         move.w    #$e002,$106(a6)
  3304.         move.w    #$fff,$1be(a6)
  3305.         move.l    main_configscr,a0
  3306.         add.l    #20480+1024,a0
  3307.         move.l    main_dataptr,a1
  3308.         move.l    48(a1),d0
  3309.         divu    #313*4,d0
  3310.         cmp.w    #255,d0
  3311.         ble.s    .ok
  3312.         move.w    #255,d0
  3313. .ok:        cmp.w    #0,d0
  3314.         bge.s    .ok4
  3315.         moveq.l    #0,d0
  3316. .ok4:
  3317. ;-------------------------- d0=0-255 --
  3318.         neg.w    d0
  3319.         add.w    #255,d0
  3320.         add.w    #$28,d0
  3321.         moveq.l    #$2,d1            ; CTRL
  3322.         cmp.w    #$100,d0
  3323.         blt.s    .ok1
  3324.         or.w    #$4,d1
  3325. .ok1:        move.b    d0,(a0)
  3326.         add.w    #256,d0
  3327.         cmp.w    #256+$28,d0
  3328.         ble.s    .ok2
  3329.         move.w    #256+$38,d0
  3330. .ok2:        move.b    d0,2(a0)
  3331.         move.b    d1,3(a0)
  3332.         move.w    #$3f,$104(a6)
  3333.         move.w    #$ff,$10c(a6)
  3334.         move.l    main_configscr,a0
  3335.         add.l    #20480,a0
  3336.         tst.w    main_framedma
  3337.         bne.s    .skipcl
  3338.         lea    $dff120,a6
  3339.         moveq.l    #5,d0
  3340. .loop:        move.l    a0,(a6)+
  3341.         dbra    d0,.loop
  3342.         bra.s    .cont
  3343. .skipcl:    add.l    #6*4,a6
  3344. .cont:        add.l    #1024+1024+8,a0
  3345.         move.l    a0,(a6)+
  3346.         sub.l    #1024+8,a0
  3347.         move.l    a0,(a6)        
  3348. .exit:        rts
  3349.  
  3350. main_framesprite:
  3351.         dc.l    $00000000,$00000000,$00000000,$00000000
  3352.         dc.l    $00000000,$00000000,$00000000,$00000000
  3353.         dc.l    $00000000,$00000000,$00000000,$00000000
  3354.         dc.l    $00000000,$00000000,$00000000,$00000000
  3355.         dc.l    $00000000,$00000000,$00000000,$00000000
  3356.         dc.l    $00000000,$00000000,$00000000,$ffff0000
  3357.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3358.         dc.l    $9e013eaa,$82015754,$84012eaa,$e5f11404
  3359.         dc.l    $88012aaa,$88015d54,$88012aaa,$80015554
  3360.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3361.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3362.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3363.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3364.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3365.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3366.         dc.l    $8e012eaa,$90015554,$90013aaa,$dcf11d04
  3367.         dc.l    $92013aaa,$92015754,$8c012eaa,$80015554
  3368.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3369.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3370.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3371.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3372.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3373.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3374.         dc.l    $9e013eaa,$90015554,$90013aaa,$ddf11c04
  3375.         dc.l    $82012aaa,$92015754,$8c012eaa,$80015554
  3376.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3377.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3378.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3379.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3380.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3381.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3382.         dc.l    $92013aaa,$92015754,$92013aaa,$def11f04
  3383.         dc.l    $82012aaa,$82015754,$82012aaa,$80015554
  3384.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3385.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3386.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3387.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3388.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3389.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3390.         dc.l    $8c012eaa,$92015754,$82012aaa,$ecf11d04
  3391.         dc.l    $82012aaa,$92015754,$8c012eaa,$80015554
  3392.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3393.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3394.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3395.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3396.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3397.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3398.         dc.l    $80012aaa,$8c015d54,$92013aaa,$c2f11704
  3399.         dc.l    $84012eaa,$88015d54,$9e013eaa,$80015554
  3400.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3401.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3402.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3403.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3404.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3405.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3406.         dc.l    $84012eaa,$8c015d54,$84012eaa,$f5f10404
  3407.         dc.l    $84012eaa,$84015554,$8e012eaa,$80015554
  3408.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3409.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3410.         dc.l    $80012aaa,$80015554,$80012aaa,$ffc10014
  3411.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3412.         dc.l    $80012aaa,$80015554,$80012aaa,$803f5540
  3413.         dc.l    $80012aaa,$80015554,$80012aaa,$80015554
  3414.         dc.l    $80012aaa,$80015554,$80012aaa,$ffff0000
  3415.     ENDIF
  3416.     ENDIF
  3417.  
  3418.  
  3419.     IFND    MAIN_DEBUGOFF
  3420.  
  3421. main_contxt00:    dc.b    13,10,'  NonSystem startup v3.1 - Copyright TBL 1995.'
  3422.         dc.b    13,10,'  Debugger v1.0 - Copyright TBL 1995.'
  3423.         dc.b    13,10,13,10
  3424.         dc.b    '  Coded by Equalizer of The Black Lotus.',13,10
  3425.         dc.b    13,10
  3426.         dc.b    0
  3427. main_contxt01:    dc.b    'PC: ',0
  3428. main_contxtlf:    dc.b    10,13,0
  3429. main_contxt02:    dc.b    'D0: ',0
  3430. main_contxt03:    dc.b    'A0: ',0
  3431. main_contxt04:    dc.b    10,13,'>',0
  3432. main_contxt05:    dc.b    '                   dma: ',0
  3433. main_contxt06:    dc.b    ' SR: ',0
  3434. main_contxt07:    dc.b    ' intena: ',0
  3435. main_contxt08:    dc.b    ' ',0
  3436. main_contxt09:    dc.b    ' intreq: ',0
  3437. main_contxt10:    dc.b    '  timer: ',0
  3438. main_contxt11:    dc.b    ' counter: ',0
  3439. main_contxt12:    dc.b    '                       main_counter: ',0
  3440. main_contxt13:    dc.b    0,0    
  3441. main_contxt14:    dc.b    10,13,'Unknown command !!!',10,13,0
  3442. main_contxt15:    blk.b    79,32
  3443.         dc.b    0
  3444. main_contxt16:    dc.b    'Continue program  Exit to system  View screen'
  3445.         dc.b    '  Run frame by frame   Commands',0
  3446. main_contxt17:    dc.b    13,10,'  # Help',13,10,13,10
  3447.         dc.b    "  'j'    Continue program                 "
  3448.         dc.b    "  '!'    Exit to system",13,10
  3449.         dc.b    "  'v'    View program screen              "
  3450.         dc.b    "  'f'    Run frame by frame",13,10
  3451.         dc.b    "  'hi'   Hardware info                    "
  3452.         dc.b    "  'help' Display commands",13,10
  3453.         dc.b    "  't'    View variables (Timer,Counters & Test:)",13,10
  3454.         dc.b    "  'di'   View debugger info (Version etc.)",13,10
  3455.         dc.b    "  'scop' Search fro copperlist in memory",13,10
  3456.         dc.b    "  'vcop' View copper list (Text)",13,10
  3457.         dc.b    "  'copadd' Adds 4 to copper address.",13,10
  3458.         dc.b    "  'copsub' Subtracts 4 to copper address.",13,10
  3459.         dc.b    "  'meteron' Enable frame meter.",13,10
  3460.         dc.b    "  'meteroff' Disable frame meter.",13,10
  3461.         dc.b    0    
  3462. main_contxt18:    dc.b    13,10,'  test:  ',0
  3463. main_contxt19:    dc.b    13,10,'         ',0
  3464. main_contxt20:    dc.b    'Debugger called by: ',0
  3465.  
  3466. main_conhexchars:dc.b    '0123456789abcdef'
  3467. main_contxthex:    dc.b    '00000000',0
  3468.  
  3469.     IFND    main_debugoff
  3470.  
  3471. main_macro0:    dc.b    27,'help',13,0
  3472.         even
  3473. main_commandlist:dc.b    'hi',0,0
  3474.         dc.l    main_conprintsi
  3475.         dc.b    'j',0
  3476.         dc.l    main_cmdcont
  3477.         dc.b    '!',0
  3478.         dc.l    main_cmdexit
  3479.         dc.b    'v',0
  3480.         dc.l    main_cmdview
  3481.         dc.b    't',0
  3482.         dc.l    main_cmdtest
  3483.         dc.b    'f',0
  3484.         dc.l    main_cmdtrace
  3485.         dc.b    'di',0,0
  3486.         dc.l    main_cmddi
  3487.         dc.b    'help',0,0
  3488.         dc.l    main_cmdhelp
  3489.         dc.b    'scop',0,0
  3490.         dc.l    main_cmdscop
  3491.         dc.b    'copadd',0,0
  3492.         dc.l    main_cmdcopadd
  3493.         dc.b    'copsub',0,0
  3494.         dc.l    main_cmdcopsub
  3495.         dc.b    'vcop',0,0
  3496.         dc.l    main_cmdcopview
  3497.         dc.b    'meteron',0
  3498.         dc.l    main_cmdmeteron
  3499.         dc.b    'meteroff',0,0
  3500.         dc.l    main_cmdmeteroff
  3501.         dc.l    0
  3502.  
  3503. main_mouseold:    dc.w    0
  3504. main_mousex:    dc.w    0            ; X Pos
  3505. main_mousey:    dc.w    0            ; Y Pos
  3506. main_mouseorgx:    dc.w    128*2            ; X Org
  3507. main_mouseorgy:    dc.w    $28*2            ; Y Org
  3508. main_mousesprx:    dc.w    6            ; Sprite X
  3509. main_mousespry:    dc.w    6            ; Sprite Y
  3510. main_mousesprptr:dc.l    0            ; Sprite ptr
  3511. main_mousewidth:dc.w    640            ; Sprite zone width
  3512. main_mouseheight:dc.w    512            ; Sprite zone height
  3513. main_mousezone:    dc.w    -1            ; Reports current mousezone
  3514.  
  3515. main_zonecodes:    dc.l    main_cmdcont
  3516.         dc.l    main_cmdexit
  3517.         dc.l    main_cmdview
  3518.         dc.l    main_cmdtrace
  3519.         dc.l    main_cmdhelp2
  3520.  
  3521. main_mousezones:dc.w    0,472,143,504
  3522.         dc.l    0
  3523.         dc.w    144,472,271,504
  3524.         dc.l    0
  3525.         dc.w    272,472,375,504
  3526.         dc.l    0
  3527.         dc.w    376,472,537,504
  3528.         dc.l    0
  3529.         dc.w    538,472,639,504
  3530.         dc.l    0
  3531.         dc.w    -1,-1,-1,-1        ; No more mousezones..
  3532.         dc.l    0            ; Blahhh
  3533.  
  3534. main_inputlength:dc.w    0        
  3535. main_inputbuffer:blk.b    128
  3536.  
  3537. main_mousesprite:dc.l    $48605000
  3538.         dc.w    %1001001000000000,%1000001000000000
  3539.         dc.w    %0000000000000000,%0000000000000000
  3540.         dc.w    %0000000000000000,%0001000000000000
  3541.         dc.w    %1000001000000000,%0010100000000000
  3542.         dc.w    %0000000000000000,%0001000000000000
  3543.         dc.w    %0000000000000000,%0000000000000000
  3544.         dc.w    %1001001000000000,%1000001000000000
  3545.         dc.w    %0000000000000000,%0000000000000000
  3546.         dc.l    0,0
  3547. main_curssprite:dc.l    $48605000
  3548.         dc.w    %1111000000000000,%0000000000000000
  3549.         dc.w    %1001000000000000,%0110000000000000
  3550.         dc.w    %1001000000000000,%0110000000000000
  3551.         dc.w    %1001000000000000,%0110000000000000
  3552.         dc.w    %1001000000000000,%0110000000000000
  3553.         dc.w    %1001000000000000,%0110000000000000
  3554.         dc.w    %1001000000000000,%0110000000000000
  3555.         dc.w    %1111000000000000,%0000000000000000
  3556.         dc.l    0,0    
  3557.  
  3558. main_confirst:    dc.w    0
  3559. main_concurx:    dc.w    0        ; Config screen XCursor
  3560. main_concury:    dc.w    0        ; Config screen YCursor
  3561.  
  3562. main_font:    dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3563.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3564.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3565.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3566.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3567.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3568.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3569.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3570.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3571.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3572.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3573.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3574.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3575.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3576.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3577.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3578.         dc.l    $00000000,$00000000,$183c3c18,$18001800
  3579.         dc.l    $6c6c0000,$00000000,$6c6cfe6c,$fe6c6c00
  3580.         dc.l    $183e603c,$067c1800,$00c6cc18,$3066c600
  3581.         dc.l    $386c6876,$dccc7600,$18183000,$00000000
  3582.         dc.l    $0c183030,$30180c00,$30180c0c,$0c183000
  3583.         dc.l    $00663cff,$3c660000,$0018187e,$18180000
  3584.         dc.l    $00000000,$00181830,$0000007e,$00000000
  3585.         dc.l    $00000000,$00181800,$03060c18,$3060c000
  3586.         dc.l    $3c666e7e,$76663c00,$18381818,$18187e00
  3587.         dc.l    $3c66061c,$30667e00,$3c66061c,$06663c00
  3588.         dc.l    $1c3c6ccc,$fe0c1e00,$7e607c06,$06663c00
  3589.         dc.l    $1c30607c,$66663c00,$7e66060c,$18181800
  3590.         dc.l    $3c66663c,$66663c00,$3c66663e,$060c3800
  3591.         dc.l    $00181800,$00181800,$00181800,$00181830
  3592.         dc.l    $0c183060,$30180c00,$00007e00,$007e0000
  3593.         dc.l    $30180c06,$0c183000,$3c66060c,$18001800
  3594.         dc.l    $7cc6dede,$dec07800,$183c3c66,$7ec3c300
  3595.         dc.l    $fc66667c,$6666fc00,$3c66c0c0,$c0663c00
  3596.         dc.l    $f86c6666,$666cf800,$fe666078,$6066fe00
  3597.         dc.l    $fe666078,$6060f000,$3c66c0ce,$c6663e00
  3598.         dc.l    $6666667e,$66666600,$7e181818,$18187e00
  3599.         dc.l    $0e060606,$66663c00,$e6666c78,$6c66e600
  3600.         dc.l    $f0606060,$6266fe00,$82c6eefe,$d6c6c600
  3601.         dc.l    $c6e6f6de,$cec6c600,$386cc6c6,$c66c3800
  3602.         dc.l    $fc66667c,$6060f000,$386cc6c6,$c66c3c06
  3603.         dc.l    $fc66667c,$6c66e300,$3c667038,$0e663c00
  3604.         dc.l    $7e5a1818,$18183c00,$66666666,$66663e00
  3605.         dc.l    $c3c36666,$3c3c1800,$c6c6c6d6,$feeec600
  3606.         dc.l    $c3663c18,$3c66c300,$c3c3663c,$18183c00
  3607.         dc.l    $fec68c18,$3266fe00,$3c303030,$30303c00
  3608.         dc.l    $c0603018,$0c060300,$3c0c0c0c,$0c0c3c00
  3609.         dc.l    $10386cc6,$00000000,$00000000,$000000fe
  3610.         dc.l    $18180c00,$00000000,$00003c06,$1e663b00
  3611.         dc.l    $e0606c76,$66663c00,$00003c66,$60663c00
  3612.         dc.l    $0e06366e,$66663b00,$00003c66,$7e603c00
  3613.         dc.l    $1c363078,$30307800,$00003b66,$663cc67c
  3614.         dc.l    $e0606c76,$6666e600,$18003818,$18183c00
  3615.         dc.l    $06000606,$0606663c,$e060666c,$786ce600
  3616.         dc.l    $38181818,$18183c00,$00006677,$6b636300
  3617.         dc.l    $00007c66,$66666600,$00003c66,$66663c00
  3618.         dc.l    $0000dc66,$667c60f0,$00003d66,$663e0607
  3619.         dc.l    $0000ec76,$6660f000,$00003e60,$3c067c00
  3620.         dc.l    $08183e18,$181a0c00,$00006666,$66663b00
  3621.         dc.l    $00006666,$663c1800,$0000636b,$6b363600
  3622.         dc.l    $00006336,$1c366300,$00006666,$663c1870
  3623.         dc.l    $00007e4c,$18327e00,$0e181870,$18180e00
  3624.         dc.l    $18181818,$18181800,$7018180e,$18187000
  3625.         dc.l    $729c0000,$00000000,$cc33cc33,$cc33cc33
  3626.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3627.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3628.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3629.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3630.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3631.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3632.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3633.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3634.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3635.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3636.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3637.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3638.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3639.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3640.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3641.         dc.l    $7e666666,$66667e00,$7e666666,$66667e00
  3642.         dc.l    $00000000,$00000000,$18001818,$3c3c1800
  3643.         dc.l    $0c3e6c6c,$3e0c0000,$1c363078,$30307e00
  3644.         dc.l    $423c663c,$42000000,$c3663c18,$3c183c00
  3645.         dc.l    $18181800,$18181800,$3c403c66,$3c023c00
  3646.         dc.l    $66000000,$00000000,$7e819db1,$b19d817e
  3647.         dc.l    $304888f8,$00fc0000,$003366cc,$66330000
  3648.         dc.l    $3e060000,$00000000,$00007e7e,$00000000
  3649.         dc.l    $7e81b9b9,$b1a9817e,$7e000000,$00000000
  3650.         dc.l    $3c663c00,$00000000,$18187e18,$18007e00
  3651.         dc.l    $f0183060,$f8000000,$f0183018,$f0000000
  3652.         dc.l    $18300000,$00000000,$0000c6c6,$c6eefac0
  3653.         dc.l    $7ef4f474,$14141400,$00001818,$00000000
  3654.         dc.l    $00000000,$00001830,$30703030,$30000000
  3655.         dc.l    $70888870,$00f80000,$00cc6633,$66cc0000
  3656.         dc.l    $2063262c,$19336701,$2063262c,$1b316207
  3657.         dc.l    $c023662c,$d9336701,$18001830,$60663c00
  3658.         dc.l    $30083c66,$7ec3c300,$0c103c66,$7ec3c300
  3659.         dc.l    $18243c66,$7ec3c300,$718e3c66,$7ec3c300
  3660.         dc.l    $c3183c66,$7ec3c300,$3c663c66,$7ec3c300
  3661.         dc.l    $1f3c3c6f,$7ccccf00,$3c66c0c0,$663c0830
  3662.         dc.l    $6010fe60,$7860fe00,$1820fe60,$7860fe00
  3663.         dc.l    $3048fe60,$7860fe00,$6600fe60,$7860fe00
  3664.         dc.l    $30087e18,$18187e00,$0c107e18,$18187e00
  3665.         dc.l    $18247e18,$18187e00,$66007e18,$18187e00
  3666.         dc.l    $f86c66f6,$666cf800,$718ec6e6,$d6cec600
  3667.         dc.l    $30083c66,$c3663c00,$0c103c66,$c3663c00
  3668.         dc.l    $18243c66,$c3663c00,$718e3c66,$c3663c00
  3669.         dc.l    $c33c66c3,$c3663c00,$0063361c,$36630000
  3670.         dc.l    $3d66cfdb,$f366bc00,$30086666,$66663e00
  3671.         dc.l    $0c106666,$66663e00,$18246666,$66663e00
  3672.         dc.l    $66006666,$66663e00,$0608c366,$3c183c00
  3673.         dc.l    $f0607e63,$637e60f0,$7c66666c,$66666c60
  3674.         dc.l    $30083c06,$1e663b00,$0c103c06,$1e663b00
  3675.         dc.l    $18243c06,$1e663b00,$718e3c06,$1e663b00
  3676.         dc.l    $33003c06,$1e663b00,$3c663c06,$1e663b00
  3677.         dc.l    $00007e1b,$7fd87700,$00003c66,$60663c10
  3678.         dc.l    $30083c66,$7e603c00,$0c103c66,$7e603c00
  3679.         dc.l    $18243c66,$7e603c00,$66003c66,$7e603c00
  3680.         dc.l    $30083818,$18183c00,$0c103818,$18183c00
  3681.         dc.l    $18243818,$18183c00,$66003818,$18183c00
  3682.         dc.l    $60fc187c,$c6c67c00,$718e7c66,$66666600
  3683.         dc.l    $30083c66,$66663c00,$0c103c66,$66663c00
  3684.         dc.l    $18243c66,$66663c00,$718e3c66,$66663c00
  3685.         dc.l    $66003c66,$66663c00,$0018007e,$00180000
  3686.         dc.l    $00013e67,$6b733e40,$30086666,$66663b00
  3687.         dc.l    $0c106666,$66663b00,$18246666,$66663b00
  3688.         dc.l    $66006666,$66663b00,$0c106666,$663c1870
  3689.         dc.l    $f0607c66,$667c60f0,$66006666,$663c1870
  3690.  
  3691. main_concols:    blk.w    7
  3692.         
  3693. main_configcop:    dc.l    $01009200,$01020000,$01040024,$01060000,$010c0011
  3694.         dc.l    $01fc0000,$01080000,$010a0000,$01800000,$018200f0
  3695.         dc.l    $01ba0888,$01bc0bbb,$01be0eee,$01a200d0,$01a400a0
  3696.         dc.l    $008e2881,$009028c1,$0092003c,$009400d4
  3697. main_conbplptrs:dc.l    $00e00000,$00e20000
  3698. main_consprptr:    dc.l    $01200000,$01220000,$01240000,$01260000
  3699.         dc.l    $01280000,$012a0000,$012c0000,$012e0000
  3700.         dc.l    $01300000,$01320000,$01340000,$01360000
  3701.         dc.l    $01380000,$013a0000,$013c0000,$013e0000
  3702.         dc.l    $fffffffe        
  3703. main_conoldsp:    dc.l    0
  3704. main_concounter:dc.l    0            ; Up 1 every VBL
  3705.  
  3706. ;----------------------------------------------------------- Keyboard data --
  3707.  
  3708. kbd_oldlevel2:    dc.l    0        ; For saving level 2
  3709. kbd_reptwait:    dc.w    10        ; VBL's until rept
  3710. kbd_reptspeed:    dc.w    0        ; Rept speed
  3711. kbd_repttimerw:    dc.w    0        ; Timer for rept wait
  3712. kbd_repttimers:    dc.w    0        ; Timer for rept speed
  3713. kbd_flagcodes:    dc.b    $61,$65,$67,$66,$64,$60,$63,$62
  3714.         dc.b    $e1,$e5,$e7,$e6,$e4,$e0,$e3,$e2
  3715. kbd_realflags:    dc.b    0        ; Cps,Ctl,LSh,LAlt,LAm,RAm,RAlt,RSh
  3716. kbd_flags:    dc.b    0
  3717. kbd_realraw:    dc.b    0        ; Input real raw
  3718. kbd_rawkey:    dc.b    0        ; The raw value of the keypress
  3719. kbd_keypressed:    dc.b    0        ; Keypressed flag, 0=Not pressed
  3720. kbd_macroread:    dc.b    0        ; Read from macro buffer flag.
  3721. kbd_macropos:    dc.l    0        ; Macro read pos
  3722. kbd_asciikey:    dc.w    0        ; Last ascii code
  3723. kbd_customptr:    dc.l    0        ; Custom routine on every key event
  3724. kbd_keymapptr:    dc.l    0        ; Ptr to keymap (0=Default)
  3725. kbd_macroptr:    dc.l    0        ; Ptr to macro list (0=No macros)
  3726. kbd_keydefault:    dc.l    $00600031,$00320033,$00340035,$00360037
  3727.         dc.l    $00380039,$0030002b,$0027005c,$00000030
  3728.         dc.l    $00710077,$00650072,$00740079,$00750069
  3729.         dc.l    $006f0070,$00e500a8,$00000031,$00320033
  3730.         dc.l    $00610073,$00640066,$00670068,$006a006b
  3731.         dc.l    $006c00f6,$00e40027,$00000034,$00350036
  3732.         dc.l    $003c007a,$00780063,$00760062,$006e006d
  3733.         dc.l    $002c002e,$002d0000,$002e0037,$00380039
  3734.         dc.l    $00200008,$0009000d,$000d001b,$007f0000
  3735.         dc.l    $00000000,$002d0000,$00800081,$00830082
  3736.         dc.l    $00000000,$00000000,$00000000,$00000000
  3737.         dc.l    $00000000,$005b005d,$002f002a,$002b00a0
  3738.         dc.l    $00000000,$00000000,$00000000,$00000000
  3739.         dc.l    $00000000,$00000000,$00000000,$00000000
  3740.         dc.l    $00000000,$00000000,$00000000,$00000000
  3741.         dc.l    $00000000,$00000000,$00000000,$00000000
  3742.         dc.l    $007e0021,$002200a3,$00240025,$0026002f
  3743.         dc.l    $00280029,$003d003f,$006000a6,$00000030
  3744.         dc.l    $00510057,$00450052,$00540059,$00550049
  3745.         dc.l    $004f0050,$00c2005e,$00000000,$00000000
  3746.         dc.l    $00410053,$00440046,$00470048,$004a004b
  3747.         dc.l    $004c00d6,$00c4002a,$00000000,$00000000
  3748.         dc.l    $003e005a,$00580043,$00560042,$004e004d
  3749.         dc.l    $003b003a,$005f0000,$002e0000,$00000000
  3750.         dc.l    $00200000,$00090000,$000d001b,$009e0000
  3751.         dc.l    $00000000,$002d0000,$00840085,$00870086
  3752.         dc.l    $00000000,$00000000,$00000000,$00000000
  3753.         dc.l    $00000000,$007b007d,$002f002a,$002b00a1
  3754.         dc.l    $00000000,$00000000,$00000000,$00000000
  3755.         dc.l    $00000000,$00000000,$00000000,$00000000
  3756.         dc.l    $00000000,$00000000,$00000000,$00000000
  3757.         dc.l    $00000000,$00000000,$00000000,$00000000
  3758.         dc.l    $00600031,$00320033,$00340035,$00360037
  3759.         dc.l    $00380039,$0030002b,$0027005c,$00000000
  3760.         dc.l    $00710077,$00650072,$00740079,$00750069
  3761.         dc.l    $006f0070,$00e500a8,$00000000,$00000000
  3762.         dc.l    $00610073,$00640066,$00670068,$006a006b
  3763.         dc.l    $006c00f6,$00e40027,$00000000,$00000000
  3764.         dc.l    $003c007a,$00780063,$00760062,$006e006d
  3765.         dc.l    $002c002e,$002d0000,$00000000,$00000000
  3766.         dc.l    $00000000,$00000000,$00000000,$00000000
  3767.         dc.l    $00000000,$00000000,$00880089,$008b008a
  3768.         dc.l    $00000000,$00000000,$00000000,$00000000
  3769.         dc.l    $00000000,$00000000,$00000000,$000000a2
  3770.         dc.l    $00000000,$00000000,$00000000,$00000000
  3771.         dc.l    $00000000,$00000000,$00000000,$00000000
  3772.         dc.l    $00000000,$00000000,$00000000,$00000000
  3773.         dc.l    $00000000,$00000000,$00000000,$00000000
  3774.         dc.l    $00000000,$00000000,$00000000,$00000000
  3775.         dc.l    $00000000,$00000000,$00000000,$00000000
  3776.         dc.l    $00000000,$00000000,$00000000,$00000000
  3777.         dc.l    $00000000,$00000000,$00000000,$00000000
  3778.         dc.l    $00000000,$00000000,$00000000,$00000000
  3779.         dc.l    $00000000,$00000000,$00000000,$00000000
  3780.         dc.l    $00000000,$00000000,$00000000,$00000000
  3781.         dc.l    $00000000,$00000000,$00000000,$00000000
  3782.         dc.l    $00000000,$00000000,$00000000,$00000000
  3783.         dc.l    $00000000,$00000000,$00000000,$00000000
  3784.         dc.l    $00000000,$00000000,$00000000,$00000000
  3785.         dc.l    $00000000,$00000000,$00000000,$00000000
  3786.         dc.l    $00000000,$00000000,$00000000,$00000000
  3787.         dc.l    $00000000,$00000000,$00000000,$00000000
  3788.         dc.l    $00000000,$00000000,$00000000,$00000000
  3789.         dc.l    $00000000,$00000000,$00000000,$00000000
  3790.         dc.l    $006000a1,$00b200b3,$00a40000,$00000000
  3791.         dc.l    $00000000,$000000bf,$003d0000,$00000000
  3792.         dc.l    $00710077,$00e900ae,$00740079,$00750069
  3793.         dc.l    $006f0070,$00e5005e,$00000000,$00000000
  3794.         dc.l    $00bc00bd,$00be0066,$00670068,$006a006b
  3795.         dc.l    $006c002c,$002700b7,$00000000,$00000000
  3796.         dc.l    $003e007a,$007800a9,$00760062,$006e006d
  3797.         dc.l    $00ab00bb,$002f0000,$00000000,$00000000
  3798.         dc.l    $00000000,$00000000,$000d0000,$009f0000
  3799.         dc.l    $00000000,$00000000,$00960097,$00990098
  3800.         dc.l    $00000000,$00000000,$00000000,$00000000
  3801.         dc.l    $00000000,$00000000,$00000000,$000000a3
  3802.         dc.l    $00000000,$00000000,$00000000,$00000000
  3803.         dc.l    $00000000,$00000000,$00000000,$00000000
  3804.         dc.l    $00000000,$00000000,$00000000,$00000000
  3805.         dc.l    $00000000,$00000000,$00000000,$00000000
  3806.         dc.l    $007e0021,$00400023,$00240025,$005e0026
  3807.         dc.l    $002a0028,$0029005f,$002b00a6,$00000000
  3808.         dc.l    $00000000,$00c90000,$00000000,$00000000
  3809.         dc.l    $00000000,$00c5005e,$00000000,$00000000
  3810.         dc.l    $00000000,$00000000,$00000000,$00000000
  3811.         dc.l    $0000003a,$0022002a,$00000000,$00000000
  3812.         dc.l    $003e0000,$00000000,$00000000,$00000000
  3813.         dc.l    $003c003e,$003f0000,$00000000,$00000000
  3814.         dc.l    $00000000,$00000000,$00000000,$009e0000
  3815.         dc.l    $00000000,$00000000,$009a009b,$009d009c
  3816.         dc.l    $00000000,$00000000,$00000000,$00000000
  3817.         dc.l    $00000000,$00000000,$00000000,$000000a4
  3818.         blk.b    6720
  3819.  
  3820. kbd_buffer:    dc.b    0,0        ; Head & Tail ptr
  3821.         ds.w    256        ; Buffer
  3822.  
  3823. main_contrace:    dc.w    0            ; Trace flag
  3824. main_configscr:    dc.l    0            ; Ptr to bpl for configscr
  3825. main_conintena:    dc.w    0            ; Config old intena
  3826. main_conintreq:    dc.w    0            ; Config old intreq
  3827. main_condmacon:    dc.w    0            ; Config old dma
  3828. main_configsr:    dc.w    0            ; Int status reg
  3829. main_configpc:    dc.l    0            ; Int userpc
  3830. main_configregs:blk.l    16            ; Registers a7-d0
  3831. main_configexit:dc.w    0            ; Set to 1 to close con screen
  3832. main_configscreen:dc.w    0            ; Flag to indicate if config
  3833.     ENDIF
  3834.     ENDIF    ; main_debugoff
  3835.  
  3836. *************************************************************************
  3837. * System related data                            *
  3838. *************************************************************************
  3839.  
  3840. main_readakey:    dc.w    0            ; Flag for keyread
  3841. main_vectorlist:
  3842.     IFD    main_textvaron
  3843.         dc.l    main_contxt21,0    ;  1 User (Text ptr,PC add)
  3844.         dc.l    main_contxt22,0    ;  2 Bus
  3845.         dc.l    main_contxt23,0    ;  3 Address
  3846.         dc.l    main_contxt24,2    ;  4 Illegal
  3847.         dc.l    main_contxt25,0    ;  5 Div
  3848.         dc.l    main_contxt26,0    ;  6 CHK
  3849.         dc.l    main_contxt27,0    ;  7 TRAPV
  3850.         dc.l    main_contxt28,0    ;  8 Privilege
  3851.         dc.l    main_contxt29,0    ;  9 Trace
  3852.         dc.l    main_contxt30,2    ; 10 Axxx
  3853.         dc.l    main_contxt31,2    ; 11 Fxxx
  3854.         dc.l    main_contxt32,0    ; 12 Requierment no ok
  3855.         dc.l    main_contxt33,0    ; 13 Level 7 external int
  3856.         dc.l    main_contxt34,0    ; 14 End of program
  3857.         dc.l    main_contxt35,0    ; 15 Error loading file
  3858.     ENDIF
  3859.  
  3860. main_counter2:    dc.l    0
  3861. main_usersr:    dc.w    0            ; Int status reg
  3862. main_userpc:    dc.l    0            ; Int userpc
  3863. main_registers:    blk.l    16            ; Registers a7-d0
  3864. main_oldvectors:blk.l    17            ; Space for system vectors
  3865. main_oldintena:    dc.w    0            ; saved intena
  3866. main_oldintreq:    dc.w    0            ; saved intreq
  3867. main_olddmacon:    dc.w    0            ; saved dmacon
  3868. main_oldadkcon:    dc.w    0            ; saved adkcon
  3869. main_oldactscreen:dc.l    0            ; Saved actscreen
  3870. main_oldcopper1:dc.l    0            ; Ptr to syscop 1
  3871. main_oldcopper2:dc.l    0            ; Ptr to syscop 2
  3872. main_oldbeamcon:dc.w    0            ; Old beamcontrol bits
  3873. main_novbl:    dc.w    0            ; Clr to run VBL
  3874. main_forcedebug:dc.w    0            ; Not 0=Debug mode forced
  3875.     ENDIF    ; main_systemon  (VERY large IF)
  3876.  
  3877.  
  3878. main_printok:    dc.b    0            ; Print flag
  3879. main_conuse:    dc.b    0            ; Console use flag
  3880. main_gfxhandler:dc.l    0            ; Graphics handler
  3881. main_erraddy:    dc.l    0            ; On fail jump to addy..
  3882. main_errsp:    dc.l    0            ; On fail new sp
  3883. main_argv:    dc.l    0            ; Ptr to arguments
  3884. main_cachereg:    dc.l    0            ; Cache reg ptr
  3885. main_cacheok:    dc.w    0            ; Ok 2 reset cache ?
  3886.         IFND    main_short
  3887. test:        blk.l    16            ; Test block
  3888.         ENDIF
  3889.         
  3890.  
  3891.         IFND    main_skipsysinfo
  3892. main_processor:    dc.w    0            ; Processor 0=00,1=10 etc
  3893. main_coproc:    dc.w    0            ; Math coprocessor 1=Yes
  3894. main_mmu:    dc.w    0            ; MMU 1=Yes
  3895. main_aga:    dc.w    0            ; AGA chipset 1=Yes
  3896. main_ecs:    dc.w    0            ; ECH chipset 1=Yes
  3897. main_chipmem:    dc.l    0            ; Chip mem
  3898. main_fastmem:    dc.l    0            ; Fast mem
  3899. main_availfast:    dc.l    0            ; Largest Fast
  3900. main_availchip:    dc.l    0            ; Largest chip
  3901.  
  3902. main_refresh:    dc.w    0            ; VBL Refresh rate
  3903. main_powerfreq:    dc.w    0            ; Power frequency
  3904. main_sysflags:    dc.w    0            ; System flags
  3905. main_ok2run:    dc.w    0
  3906.         ENDIF
  3907.  
  3908.     IFND    main_short
  3909. main_argcount:    dc.l    0
  3910. main_arglist:    blk.l    16
  3911. main_timer2:    dc.l    0    ; Last timer value
  3912. main_savecount:    dc.l    0
  3913. main_savecount2:dc.l    0
  3914.     ENDIF
  3915.  
  3916. *************************************************************************
  3917. * Text related data                            *
  3918. *************************************************************************
  3919.  
  3920. main_lastkey:        dc.b    0
  3921. main_doslibname:    dc.b    'dos.library',0        ; Doslib name
  3922. main_gfxlibname:    dc.b    'graphics.library',0    ; GfxLib name
  3923. main_consolname:    dc.b    'con:0/0/640/256/'    ; Console name
  3924. main_progname:    IFND    main_programname
  3925.             dc.b    'NoName',0        ; Program name
  3926.         ELSE
  3927.             main_programname        ; Own prog name
  3928.             dc.b    0
  3929.         ENDIF
  3930.  
  3931.  
  3932.     IFD    main_textvaron
  3933.         even
  3934. main_powptr:    dc.l    main_txtpow50        ; Power freq text ptr
  3935. main_refreshptr:dc.l    main_txtvbl50        ; Ptr to refresh rate text
  3936. main_gfxptr:    dc.l    main_txtgfxorg        ; Ptr to Gfx chip text
  3937. main_procptr:    dc.l    main_txt68000        ; Processor text ptr
  3938. main_coprocptr:    dc.l    main_txtnone        ; Math coproc. text ptr
  3939. main_mmuptr:    dc.l    main_txtnone        ; MMU text ptr
  3940.  
  3941. main_contxt21:    dc.b    'User                    ',0
  3942. main_contxt22:    dc.b    'Bus error               ',0
  3943. main_contxt23:    dc.b    'Address error           ',0
  3944. main_contxt24:    dc.b    'Illegal instruction     ',0
  3945. main_contxt25:    dc.b    'Division by zero error  ',0
  3946. main_contxt26:    dc.b    'CHK command             ',0
  3947. main_contxt27:    dc.b    'TRAPV command           ',0
  3948. main_contxt28:    dc.b    'Privilege violation     ',0
  3949. main_contxt29:    dc.b    'Trace                   ',0
  3950. main_contxt30:    dc.b    'Axxx command emulation  ',0
  3951. main_contxt31:    dc.b    'Fxxx command emulation  ',0
  3952. main_contxt32:    dc.b    'Hardware to lame =8)    ',0
  3953. main_contxt33:    dc.b    'Level 7 external break  ',0
  3954. main_contxt34:    dc.b    'End of program reached  ',0
  3955. main_contxt35:    dc.b    'Error loading file      ',0
  3956.  
  3957. main_txtnoreq:    dc.b    10,13,'  No requierments needed',10,13,0
  3958. main_txtreqpass:dc.b    10,13,10,13,'  Requirement test passed.',10,13,0
  3959. main_txtreqfault:dc.b    10,13,10,13,'  Requirement test failed !!! (lamer:)'
  3960.         dc.b    10,13,0
  3961. main_txthi:    dc.b    '-- Hardware Info --------------------------------'
  3962.         dc.b    0
  3963. main_txtreq:    dc.b    '-- Hardware Requirements ------------------------'
  3964.         dc.b    0
  3965. main_txtendc:    dc.b    '-- Exit Info ------------------------------------'
  3966.         dc.b    10,13,'  Program terminated by: ',0
  3967. main_txtafter:    dc.b    10,13,'  Total running length:  ',0
  3968. main_txtminute:dc.b    ' minute ',0
  3969. main_txtminutes:dc.b    ' minutes ',0
  3970. main_txtsecond:    dc.b    ' second',0
  3971. main_txtseconds:dc.b    ' seconds',0
  3972. main_txtand:    dc.b    'and ',0
  3973. main_txtnonetime:dc.b    '0 seconds',0
  3974. main_txtend:    dc.b    10,13
  3975. main_txtblank:    dc.b    '-------------------------------------------------'
  3976.         dc.b    10,13,0
  3977. main_txtplus:    dc.b    '+ ',0
  3978. main_txtpassed:    dc.b    '.. passed',0
  3979. main_txtfault:    dc.b    '.. failed',0
  3980. main_txtecsplus:dc.b    'ECS+ ',0
  3981. main_txtagaplus:dc.b    'AGA+ ',0
  3982. main_txt68000:    dc.b    '68000',0
  3983. main_txt68010:    dc.b    '68010',0
  3984. main_txt68020:    dc.b    '68020',0
  3985. main_txt68030:    dc.b    '68030',0
  3986. main_txt68040:    dc.b    '68040',0
  3987. main_txt68060:    dc.b    '68060',0
  3988. main_txt68881:    dc.b    '68881',0
  3989. main_txt68882:    dc.b    '68882',0
  3990. main_txt68040b:    dc.b    '68040 built in',0
  3991. main_txt68060b:    dc.b    '68060 built in',0
  3992. main_txt68851:    dc.b    '68851',0
  3993. main_txtvbl50:    dc.b    'PAL (50 Hz) ',0
  3994. main_txtvbl60:    dc.b    'NTSC (60 Hz) ',0
  3995. main_txtpow50:    dc.b    '50 Hz',0
  3996. main_txtpow60:    dc.b    '60 Hz',0
  3997. main_txtgfxorg:    dc.b    'Original Denise (8362)',0
  3998. main_txtgfxecs:    dc.b    'Extended chipset (ECS Denise 8373)',0
  3999. main_txtgfxaga:    dc.b    'AGA chipset (Lisa)',0
  4000. main_txtkb:    dc.b    'kb ',0
  4001. main_txtfast:    dc.b    10,13,'  Fast-RAM needed: ',0
  4002. main_txtchip:    dc.b    10,13,'  Chip-RAM needed: ',0
  4003. main_txtpower:    dc.b    10,13,'  Power frequency: ',0
  4004. main_txtproc:    dc.b    10,13,'  Processor:       ',0
  4005. main_txtcoproc:    dc.b    10,13,'  Math processor:  ',0
  4006. main_txtmmu:    dc.b    10,13,'  MMU:             ',0
  4007. main_txtaga:    dc.b    10,13,'  Graphic chipset: ',0
  4008. main_txtvbl:    dc.b    10,13,'  Video frequency: ',0
  4009. main_txtmemchip:dc.b    10,13,10,13,'  Chipmem:         ',0
  4010. main_txtmemfast:dc.b    ' kb',10,13,'  Fastmem:         ',0
  4011. main_txtcache:    dc.b    '  All caches disabled.',0
  4012. main_txtnone:    dc.b    'None',0
  4013. main_txtlf:    dc.b    10,13,0
  4014. main_txtkblf:    dc.b    ' kb',10,13,0
  4015. main_txtdec:    dc.b    0,0,0,0,0,0,0,0,0,0,0,0
  4016.         even
  4017.     ENDIF
  4018.         even
  4019.     ENDIF
  4020.         cnop    8,8
  4021.  
  4022. main_start:    
  4023.